2014-04-16 25 views
0

我是Android開發的初學者。我試圖創建的是一個應用程序,然後等待您的答案,以便將它的文本轉換爲語音作品,然後激活語音識別和與我的代碼文本到語音作品然後它調用語音識別。然後顯示一個錯誤信息,catch塊被執行。
問題是我必須在一個單獨的類中添加語音識別,然後在Adapter not Main Activity中添加一個Object。語音識別將無法工作,因爲Android的語音識別的所有教程都添加了主要活動中的代碼,並且我正在使用適配器中調用的類來執行此操作。Android語音識別不會在單獨的類中工作

UPDATE startActivityForResult()方法是不工作

下面是SpeechRecogntion類

public class SpeechRecog extends Activity { 

    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001; 
    String textResult ; 

    public void Start (Intent i , Context c){ 
     i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); 
     i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); 
     i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Are You Done , yet? "); 

     try{ 
      startActivityForResult(i,VOICE_RECOGNITION_REQUEST_CODE); 
     } catch(Exception e) { 
      Toast.makeText(c, "SpeechRecogntion is not avalible on your device ", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if ((requestCode == VOICE_RECOGNITION_REQUEST_CODE)&& (resultCode== RESULT_OK)) { 
      textResult= data.getStringExtra(RecognizerIntent.EXTRA_RESULTS); 

      if (checkResult()) 
       Toast.makeText(getApplicationContext(), "You are done ", Toast.LENGTH_LONG).show(); 
      else 
       Toast.makeText(getApplicationContext(), "You are not done ", Toast.LENGTH_LONG).show(); 
     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 

    private boolean checkResult() { 
     if (textResult.equals("done")||(textResult.equals("yes"))) 
      return true ; 

     return false; 
    } 
} 

的代碼和這裏是它在適配器類對象

private SpeechRecog mySP; 
private Intent mySpIntetn ; 

    public ListAdapterClass(Context context) { 
     mytts = new TxtToSpeechClass(context); 
     mySP = new SpeechRecog(); 
    } 

而這裏是我的問題依賴,在上clicklistener適配器類

Lh.btn.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) 
    { 
     if (Lh.btn.getText().equals("Play")) 
     { 
      Lh.btn.setText("Pause"); //change the btn status so user know how to stop it 

      List<Items> hResults=db.getAllItems(Lh.idList + 1);  

      for (int i = 0; i < hResults.size(); i++) 
      { 
       Items item = hResults.get(i); 
       String s = item.getItemname(); 
       mytts.Talk(s,1); 

       mySP.Start(mySpIntetn , context); //the code in here wont work is there something I'm missing here 

       Toast.makeText(context,s, Toast.LENGTH_SHORT).show(); 
      } 

      mytts.Talk("Congrats ",1);// 1 means Queue_add 

     } else { 
      Lh.btn.setText("Play"); 
      mytts.Talk("See you later", 0); // 0 means Queue_Flush 
     } 
    } 
); 
+0

什麼不行? –

+0

那麼語音識別不起作用.. – Sophia

+0

startActivityForResult()語音識別顯示錯誤,你可以檢查出來嗎?在android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101) 主要 顯示java.lang.NullPointerException 在com.example.vozapplication.SpeechRecog: – Sophia

回答

0

mySpIntetn是民辦的裏面。嘗試在Adapter類中將其更改爲public。

+0

遺憾的是它沒有工作:( – Sophia

+1

什麼logcat的說 – Foo

+0

致命異常? .Start(SpeechRecog.java:24) E/AndroidRuntime(413):at com.example.vozapplication.ListAdapterClass $ 1.onClick(ListAdapterClass.java:117) – Sophia