NullPointerException durante el uso de TTS en CustomListview

Tengo listview personalizado que contiene el contenido y la opción TTS, mientras que el uso de TTS su excepción puntero null de lanzamiento, ListView también no viene que muestra mi applicaton ha parado.Error se muestra en Logcat.

Applicationadapter.java

public class ApplicationAdapter extends ArrayAdapter<Application> implements TextToSpeech.OnInitListener{ private List<Application> items; private LayoutInflater inflator; private MainActivity activity; private ProgressDialog dialog; public TextToSpeech tts; public ImageButton btnaudioprayer; public TextView text1; ArrayAdapter<String> adapter; public ApplicationAdapter(MainActivity context, List<Application> items){ super(context, R.layout.activity_row, items); this.items = items; inflator = LayoutInflater.from(getContext()); activity=context; } @Override public int getCount(){ return items.size(); } @Override public View getView(int position, View convertView, ViewGroup parent){ ViewHolder holder = null; tts = new TextToSpeech(activity, ApplicationAdapter.this); //View v = convertView; if ( convertView == null ){ convertView = inflator.inflate(R.layout.activity_row, null); holder = new ViewHolder(); holder.text2 = (TextView) convertView.findViewById(R.id.text2); holder.text1 = (TextView) convertView.findViewById(R.id.text1); holder.count = (TextView) convertView.findViewById(R.id.count); holder.pray = (Button) convertView.findViewById(R.id.pray); holder.chk = (CheckBox) convertView.findViewById(R.id.checkbox); holder.btnSpeak = (ImageButton) convertView.findViewById(R.id.btnaudioprayer); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton view, boolean isChecked) { int getPosition = (Integer) view.getTag(); items.get(getPosition).setSelected(view.isChecked()); } }); holder.pray.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int getPosition= (Integer)v.getTag(); StringBuffer sb1 = new StringBuffer(); sb1.append("ID :"); sb1.append(Html.fromHtml(""+items.get(getPosition).getId())); sb1.append("\n"); activity.praydata(items.get(getPosition).getId()); } }); holder.btnSpeak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View V) { speakOut(); } }); Application app = items.get(position); holder.chk.setTag(position); holder.pray.setTag(position); holder.text2.setText(Html.fromHtml(app.getTitle())); holder.text1.setText(Html.fromHtml(app.getContent())); holder.count.setText(app.getCount()+""); holder.chk.setChecked(app.isSelected()); return convertView; } static class ViewHolder { public TextView text2; public TextView text1; public TextView count; public CheckBox chk; public Button pray; public ImageButton btnSpeak; private TextToSpeech tts; } @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(); } } else { Log.e("TTS", "Initilization Failed!"); } } private void speakOut() { String text = text1.getText().toString(); tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); } 

Aquí menciono mi error logcat también. En mi error logcat, está mostrando el error en esta línea String text = text1.getText().toString(); . Está lanzando NullPointerException y está mostrando el archivo log.e también. No está ejecutando el método speakout() .

 07-18 12:17:11.456: E/TTS(2314): This Language is not supported 07-18 12:17:11.456: I/TextToSpeech(2314): Connected to ComponentInfo{com.svox.pico/com.svox.pico.PicoService} 07-18 12:17:11.586: D/AndroidRuntime(2314): Shutting down VM 07-18 12:17:11.586: W/dalvikvm(2314): threadid=1: thread exiting with uncaught exception (group=0x40a70930) 07-18 12:17:11.597: E/AndroidRuntime(2314): FATAL EXCEPTION: main 07-18 12:17:11.597: E/AndroidRuntime(2314): java.lang.NullPointerException 07-18 12:17:11.597: E/AndroidRuntime(2314): at com.example.jsonandroid.ApplicationAdapter.speakOut(ApplicationAdapter.java:182) 07-18 12:17:11.597: E/AndroidRuntime(2314): at com.example.jsonandroid.ApplicationAdapter.onInit(ApplicationAdapter.java:168) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.speech.tts.TextToSpeech.dispatchOnInit(TextToSpeech.java:640) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.speech.tts.TextToSpeech.access$1000(TextToSpeech.java:52) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.speech.tts.TextToSpeech$Connection.onServiceConnected(TextToSpeech.java:1297) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.os.Handler.handleCallback(Handler.java:725) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.os.Handler.dispatchMessage(Handler.java:92) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.os.Looper.loop(Looper.java:137) 07-18 12:17:11.597: E/AndroidRuntime(2314): at android.app.ActivityThread.main(ActivityThread.java:5039) 07-18 12:17:11.597: E/AndroidRuntime(2314): at java.lang.reflect.Method.invokeNative(Native Method) 07-18 12:17:11.597: E/AndroidRuntime(2314): at java.lang.reflect.Method.invoke(Method.java:511) 07-18 12:17:11.597: E/AndroidRuntime(2314): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 

En mi listview del custume tengo texto y el botón de TTS, mientras que chascando el botón él tiene que jugar el audio del contenido.

2 Solutions collect form web for “NullPointerException durante el uso de TTS en CustomListview”

speakOut(); la llamada de speakOut(); En onInit(int status) y modificaría el speakOut(); Función como esta:

 private void speakOut(String text) { tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); } 

Y tu onclicklistener cambiaría a esto aquí:

  @Override public void onClick(View v) { View parent = (View)v.getParent(); ViewHolder vh = (ViewHolder)parent.getTag(); TextView tv = vh.text1; speakOut(tv.getText().toString()); } 

Eso debería funcionar para usted.

Su variable text1 no se inicializa, pero se declara, por lo tanto haciendo un text1.getText() , que está esencialmente tratando de getText() desde null .

Tal vez lo que quieres es el holder.text1 ( holder de la ViewHolder )?

  • ¿Por qué TextToSpeech.getLanguage () * a veces * devuelve null?
  • Obtener locales disponibles para tts
  • Transmisión de notificaciones de texto a voz durante la conducción
  • ¿Qué es un Earcon?
  • Cómo dar pausa o brecha entre palabras en TTS en android
  • Android "speak fallado: no está vinculado al motor tts"
  • Cómo crear un motor de texto a voz personalizado
  • TextToSpeech: función de palabra obsoleta en el nivel 21 de la API
  • Cómo deshabilitar la accesibilidad "TalkBack" en su aplicación?
  • TTS-UtteranceProgressListener no se llama
  • ¿Es Google TTS Engine en todos los teléfonos Android, y dónde puedo conseguirlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.