I have a custom listview that contains the content and the TTS parameter, and when using TTS it is a null pointer exception exception, the ListView also does not appear, showing that my application is stopped. Logcat displays an error message.
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); }
The logcat error is also mentioned here. In my logcat error, it shows an error in this line String text = text1.getText().toString(); . It throws a NullPointerException , and it also displays the log.e file. It does not run the speakout() method.
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)
In my list of custome I have text and a TTS button, and when I click the button, it should play audio content.
source share