2012-03-12 87 views
13

我想在Android中实现语音识别代码。如何从Android中的数组列表中获取某个特定位置的元素?我试图将arraylist转换为array并进行回顾。代码仍然不起作用。从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

你可以让代码更简单,而不是发布“实际”的代码。 – Rakesh 2012-03-12 09:12:40

回答

2

在ArrayList中你有一个位置顺序,而不是标称的顺序,所以你需要预先知道你需要选择或必须的元素之间循环,直到你发现你需要使用元素的元素位置。要做到这一点,你可以使用,如果一个迭代和,例如:

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); 

这是获得元素

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

的另一种方式是什么我明白你的问题是,你想在特定位置获取ArrayList中的元素。

假设您的列表包含整数1,2,3,4,5,并且您想获取值3.然后下面的代码行将起作用。

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 
     } 

你可以使用list.get(list.lastIndexOf(3))

40

也许下面的帮助你要么方式。

arraylistname.get(position); 
0

ü不能试试这个

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

我有阵列的位置的列表来检索,这为我工作。

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); 

}