2014-04-28 81 views
-1

我是java和android應用程序開發的新手。我正在嘗試開發一個小型android應用程序,以便從用戶獲取文本並點擊按鈕,將其轉換爲語音。我在代碼中沒有錯誤。但是,當我運行它,它表明「不幸的是應用程序已經停止」 我能得到一些幫助不幸<app>已停止

package com.daya.wetalk; 

import java.util.Locale; 

import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 
import android.speech.tts.TextToSpeech; 
import android.speech.tts.TextToSpeech.OnInitListener; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.ImageButton; 

@SuppressWarnings("unused") 
public class MainActivity extends Activity implements OnInitListener{ 

private int TYPE_TEXT_FLAG_AUTO_CORRECT=1; 
private TextToSpeech tts; 
private EditText edit; 
private ImageButton b; 

String incomingmessage; 

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

    tts= new TextToSpeech(this,(OnInitListener) this); 

    edit = (EditText)findViewById(R.id.mEdit); 
    b = (ImageButton)findViewById(R.id.mButton); 

    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v){ 

    incomingmessage=edit.getText().toString(); 

    if (incomingmessage != null){ 
     speakOut(incomingmessage); 
    } 
     } 
    }); 


    if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 
} 

public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, 
       false); 
     return rootView; 
    } 
} 

    private void speakOut(String msg){ 
     String text = msg.toString(); 

     tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 
    } 

    @Override 
    public void onDestroy(){ 
     if (tts != null){ 
      tts.stop(); 
      tts.shutdown(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onInit(int status) { 
    if (status == TextToSpeech.SUCCESS){ 

      int result = tts.setLanguage(Locale.US); 

     if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){ 
      Log.e("TTS", "This Language is not supported"); 
     }else{ 
      speakOut(incomingmessage); 
     } 

     }else{ 
      Log.e("TTS", "Initialization Failed!"); 
     } 

    } 
} 

這裏是logcat的日誌:?

04-28 05:41:47.455: I/TextToSpeech(17110): Sucessfully bound to com.google.android.tts 
04-28 05:41:47.465: W/dalvikvm(17110): threadid=1: thread exiting with uncaught exception (group=0x418f22a0) 
04-28 05:41:47.465: E/AndroidRuntime(17110): FATAL EXCEPTION: main 
04-28 05:41:47.465: E/AndroidRuntime(17110): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.daya.wetalk/com.daya.wetalk.MainActivity}: java.lang.NullPointerException 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.ActivityThread.access$700(ActivityThread.java:134) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.os.Looper.loop(Looper.java:137) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.ActivityThread.main(ActivityThread.java:4867) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at java.lang.reflect.Method.invokeNative(Native Method) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at java.lang.reflect.Method.invoke(Method.java:511) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at dalvik.system.NativeStart.main(Native Method) 
04-28 05:41:47.465: E/AndroidRuntime(17110): Caused by: java.lang.NullPointerException 
04-28 05:41:47.465: E/AndroidRuntime(17110): at com.daya.wetalk.MainActivity.onCreate(MainActivity.java:40) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.Activity.performCreate(Activity.java:5047) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
04-28 05:41:47.465: E/AndroidRuntime(17110): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056) 
04-28 05:41:47.465: E/AndroidRuntime(17110): ... 11 more 
+4

請從logcat發佈堆棧跟蹤。 – Karakuri

+0

你使用eclipse還是android studio?在顯示LogCat時請運行該應用程序,這樣您將發現發生的異常,以便我們可以幫助您。 – RvdK

+1

在課堂上最好的註釋 – Blackbelt

回答

0

請檢查您是否已經宣佈EDITTEXT &按鈕在活動xml或片段xml中。如果是這樣做所需的更改。

好吧,以便您出錯的地方你有你的UI組件在片段中,並且你正在初始化它們在活動中

將這個

tts= new TextToSpeech(this,(OnInitListener) this); 

    edit = (EditText)findViewById(R.id.mEdit); 
    b = (ImageButton)findViewById(R.id.mButton); 

    b.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v){ 

    incomingmessage=edit.getText().toString(); 

    if (incomingmessage != null){ 
     speakOut(incomingmessage); 
    } 
     } 
    }); 

裏面的OnCreate佔位符片段

檢查我在這裏回答,如果你還不清楚Add Onclick listner to android

聲明這個變量作爲佔位符類中的全局變量

private int TYPE_TEXT_FLAG_AUTO_CORRECT=1; 
private TextToSpeech tts; 
private EditText edit; 
private ImageButton b; 
String incomingmessage; 
+0

我已經聲明他們在片段xml中 – user3580843

+0

檢查我編輯的答案 – Gautami

+0

謝謝....'構造函數TextToSpeech(MainActivity.PlaceholderFragment,TextToSpeech.OnInitListener)未定義'... this現在是唯一的錯誤 – user3580843