2014-04-28 69 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