1

Получение ошибок, извините только новичок. Вся помощь будет замечательной.Текст в речь во фрагменте

05-31 21:49:16.077: E/AndroidRuntime(655): FATAL EXCEPTION: main 
    05-31 21:49:16.077: E/AndroidRuntime(655): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appal.song/com.appal.song.MainActivity}: java.lang.NullPointerException 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.os.Handler.dispatchMessage(Handler.java:99) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.os.Looper.loop(Looper.java:137) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.ActivityThread.main(ActivityThread.java:4424) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at java.lang.reflect.Method.invokeNative(Native Method) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at java.lang.reflect.Method.invoke(Method.java:511) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at dalvik.system.NativeStart.main(Native Method) 
    05-31 21:49:16.077: E/AndroidRuntime(655): Caused by: java.lang.NullPointerException 
    05-31 21:49:16.077: E/AndroidRuntime(655): at com.appal.song.Fragment_1.onCreateView(Fragment_1.java:33) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.Activity.performStart(Activity.java:4475) 
    05-31 21:49:16.077: E/AndroidRuntime(655): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929) 
    05-31 21:49:16.077: E/AndroidRuntime(655): ... 11 more 

Полный код, любая помощь будет большой, спасибо, только новичок извините. Попытка сделать текст затем рядом с ним сделать кнопку, которая будет повторять текст в речи.

public class Fragment_1 extends Fragment implements OnClickListener, OnInitListener{ 
private TextToSpeech txts; 
private static final String TAG = "TextToSpeechDemo"; 
private static final int MY_DATA_CHECK_CODE = 1234; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_1, 
      container, false); 


     Button btnAdd = (Button) getView().findViewById(R.id.button1); 
     btnAdd.setOnClickListener(this); 
     btnAdd.setEnabled(false); 

     TextView txt = (TextView) getView().findViewById(R.id.textView1); 
     txt.setText("OnCreate"); 

     // Fire off an intent to check if a TTS engine is installed 
     Intent checkIntent = new Intent(); 
     checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 
    } 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     TextView txt = (TextView) getView().findViewById(R.id.textView1); 
     if (requestCode == MY_DATA_CHECK_CODE) 
     { 
      if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) 
      { 
       // success, create the TTS instance 
       txt.setText("Done result"); 
       txts = new TextToSpeech(this, this); 
       txts.setLanguage(Locale.US); 
       Button btnAdd = (Button) getView().findViewById(R.id.button1); 
       btnAdd.setEnabled(true); 

      } 
      else 
      { 
       txt.setText("Missing"); 
       // missing data, install it 
       Intent installIntent = new Intent(); 
       installIntent.setAction(
         TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA); 
       startActivity(installIntent); 
      } 
     } 
    } 

    @Override 
    public void onDestroy() 
    { 
     // Don't forget to shutdown! 
     if (txts != null) 
     { 
      txts.stop(); 
      txts.shutdown(); 
     } 
     super.onDestroy(); 
    } 

    @Override 
    public void onClick(View v) { 

     TextView txt = (TextView) getView().findViewById(R.id.textView1); 
       txt.setText("Click"); 

     String myText1 = "hello"; 
     String myText2 = "bye"; 
     txts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null); 
     txts.speak(myText2, TextToSpeech.QUEUE_ADD, null); 
    } 
    @Override 
    public void onInit(int status) { 
     TextView txt = (TextView) getView().findViewById(R.id.textView1); 
     txt.setText("status 0"); 
     if (status == TextToSpeech.SUCCESS) { 
       txt.setText("status 1"); 
      int result = txts.setLanguage(Locale.US); 
      if (result == TextToSpeech.LANG_MISSING_DATA || 
       result == TextToSpeech.LANG_NOT_SUPPORTED) { 
       txt.setText("status 2"); 
      } else { 
       Button btnAdd = (Button) getView().findViewById(R.id.button1); 
       btnAdd.setEnabled(true); 
       txt.setText("status 3"); 
      } 
      } else { 
      txt.setText("status 4"); 
      Log.e(TAG, "Could not initialize TextToSpeech."); 
     } 
     return view; 
    } 
} 
+0

Что именно проблема? Разве это не работает? Вы получаете ошибку в logcat? – CloudyMusic

+0

Журнал ошибок с logcat? –

+0

все ошибки должны быть ошибками компиляции. 'this' относится к фрагменту и фрагментам, а не к контекстам –

ответ

8

Как я уже сказал в своем комментарии: использование this в то время как в фрагменте относится к экземпляру этого фрагмента. Фрагменты - это не Контексты, следовательно, ошибка времени компиляции.

Чтобы сделать новый TextToSpeech объект, вы должны использовать:

txts = new TextToSpeech(getActivity(), this); 

Деятельности расширить контекст, так что исправить эту ошибку времени компиляции.

Еще одна потенциальная проблема: для кнопок, TextViews и т.д., что вы настраиваете onCreateView() вы должны использовать view.findViewById() вместо getView().findViewById() (но только для соображениях вы настраиваете в onCreateView() Остальной getView(). звонки должны быть прекрасными).

Это еще один метод вызова, и getView(), вероятно, возвращает null до onCreateView() возвращает завышенный вид.

Наконец, onCreateView() должна возвращать View, так как раз перед его закрывающей скобки, добавьте:

return view; 

Метод с соответствующими изменениями:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_1, 
      container, false); 


     Button btnAdd = (Button) view.findViewById(R.id.button1); 
     btnAdd.setOnClickListener(this); 
     btnAdd.setEnabled(false); 

     TextView txt = (TextView) view.findViewById(R.id.textView1); 
     txt.setText("OnCreate"); 

     // Fire off an intent to check if a TTS engine is installed 
     Intent checkIntent = new Intent(); 
     checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
     startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

     return view; 
    } 
+0

О, спасибо, что о публичном просмотре onCreateView (LayoutInflater inflater, контейнер ViewGroup, Bundle savedInstanceState) { – user2407147

+0

@ user2407147 Обновлен ответ. –

+0

Не могли бы вы показать мне пример – user2407147