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.

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 )?

  • TextToSpeech.setEngineByPackageName () no establece nada
  • Cómo cambiar programáticamente el motor predeterminado TTS
  • La salida TTS siempre va a A2DP
  • Cómo encuestar los motores TTS disponibles para los idiomas disponibles sin instanciar cada uno y wating para init
  • Obtener locales disponibles para tts
  • Idiomas faltantes en TTS android
  • ¿Cuál es el flujo de audio predeterminado de TTS?
  • Texto a voz (TTS) -Android
  • Android texto a voz es muy lento para inicializar
  • Ejecución de TTS Android en un servicio
  • Pausa en el TTS android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.