2012-03-12 11 views
13

Estoy tratando de implementar el código de reconocimiento de voz en Android. ¿Cómo obtengo un elemento en una posición particular de la lista de arreglos en Android? Traté de convertir arraylist a array y recuperar. Aún así el código no está funcionando.Recuperando un elemento de la lista de arreglos en Android?

package com.espeaker; 


    public class EspeakerActivity extends Activity { 

        private static final int REQUEST_CODE = 1234; 
      private ListView wordsList; 


      /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 


        Button speakButton = (Button) findViewById(R.id.speakButton); 

        wordsList = (ListView) findViewById(R.id.list); 

        // Disable button if no recognition service is present 
        PackageManager pm = getPackageManager(); 
        List<ResolveInfo> activities = pm.queryIntentActivities(
          new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
        if (activities.size() == 0) 
        { 
         speakButton.setEnabled(false); 
         speakButton.setText("Recognizer not present"); 
        } 
      } 

    /** 
    * Handle the action of the button being clicked 
    */ 
    public void speakButtonClicked(View v) 
    { 
     startVoiceRecognitionActivity(); 
    } 

    /** 
    * Fire an intent to start the voice recognition activity. 
    */ 
    private void startVoiceRecognitionActivity() 
    { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo..."); 
     startActivityForResult(intent, REQUEST_CODE); 
    } 

    /** 
    * Handle the results from the voice recognition activity. 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) 
     { 
      // Populate the wordsList with the String values the recognition engine thought it heard 
      ArrayList<String> matches = data.getStringArrayListExtra(
        RecognizerIntent.EXTRA_RESULTS); 
      wordsList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
        matches)); 
      String[] array=matches.toArray(new String[matches.size()]); 
      // ArrayList<String> places = new ArrayList<String>(
       // Arrays.asList("black", "blue", "red")); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item,matches); 
       final AutoCompleteTextView input_text = (AutoCompleteTextView) findViewById(R.id.auto); 
       Button button1 = (Button) findViewById(R.id.button1); 
        input_text.setAdapter(adapter); 
      button1.setText(" "+array[0]); 

      // button1.setText(""+matches); 
      } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
    } 
+0

podría haber hecho el código mucho más simple en lugar de publicar el código "real". – Rakesh

Respuesta

2

En ArrayList tiene una orden posicional y no un fin nominal, por lo que necesita saber de antemano la posición del elemento es necesario seleccionar o debe bucle entre los elementos hasta encontrar el elemento que necesita utilizar . Para ello se puede utilizar un repetidor y un si, por ejemplo:

Iterator iter = list.iterator(); 
while (iter.hasNext()) 
{ 
    // if here   
    System.out.println("string " + iter.next()); 
} 
4
public class DemoActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ArrayList<String> al = new ArrayList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 



     // add elements to the array list 

     al.add("C"); 
     al.add("A"); 
     al.add("E"); 
     al.add("B"); 
     al.add("D"); 
     al.add("F"); 

     // retrieve elements from array 

     String data = al.get(pass the index here); 
     System.out.println("Data is "+ data); 

Esta es otra manera de conseguir elementos

 Iterator<String> it = al.iterator(); 
     while (it.hasNext()) { 
      System.out.println("Data is "+ it.next()); 
     } 
    } 
9

Lo que entiendo su pregunta es que desea para buscar un elemento en un ArrayList en una ubicación específica.

Supongamos que su lista contiene enteros 1,2,3,4,5 y desea obtener el valor 3. Entonces las siguientes líneas de código funcionarán.

ArrayList<Integer> list = new ArrayList<Integer>(); 
     if(list.contains(3)){//check if the list contains the element 
      list.get(list.indexOf(3));//get the element by passing the index of the element 
     } 

Cualquiera de las formas que puede utilizar list.get(list.lastIndexOf(3))

40

Tal vez el siguiente le ayuda.

arraylistname.get(position); 
0

U no puede probar este

for (WordList i : words) { 
    words.get(words.indexOf(i)); 
} 
0

tengo una lista de posiciones de matriz para recuperar, esto funcionó para mí.

public void create_list_to_add_group(ArrayList<Integer> arrayList_loc) { 
    //In my case arraylist_loc is the list of positions to retrive from 
    // contact_names 
    //arraylist and phone_number arraylist 

    ArrayList<String> group_members_list = new ArrayList<>(); 
    ArrayList<String> group_members_phone_list = new ArrayList<>(); 

    int size = arrayList_loc.size(); 

    for (int i = 0; i < size; i++) { 

     try { 

      int loc = arrayList_loc.get(i); 
      group_members_list.add(contact_names_list.get(loc)); 
      group_members_phone_list.add(phone_num_list.get(loc)); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 

    Log.e("Group memnbers list", " " + group_members_list); 
    Log.e("Group memnbers num list", " " + group_members_phone_list); 

} 
Cuestiones relacionadas