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
- La función de devolución de llamada de Android TTS onUtteranceCompleted no se recibe
- Agrega mi motor TTS a Android TTS Serivce como SAPI
- ¿Cómo puedo guardar la salida TTS en un archivo de audio en android?
- ¿Existe una utilidad o API para convertir abreviaturas abreviadas de SMS a oraciones adecuadas?
- No se puede detectar la finalización del androide TTS (devolución de llamada).
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.
- TextToSpeech: función de palabra obsoleta en el nivel 21 de la API
- Problema con isSpeaking () cuando se utiliza Text-to-Speech en Android
- Texto a voz (TTS) -Android
- TTS android 4.1 jellybean
- Inicializar el objeto TextToSpeech en un subproceso de trabajo
- Desarrollo de aplicaciones similares a "Google ahora" - ¿es posible utilizar el reconocimiento de voz sin entrada de teclado?
- TextToSpeech.OnInitListener.onInit (int) que se llama continuamente
- Problema de STOP de texto a voz
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
)?