[英]NullPointerException when setting the Event Handler for Spinner
I am having some issues with the android Spinner. 我在使用Android Spinner时遇到了一些问题。 Please have a look at the below codes.
请看下面的代码。
talk_settings.xml talk_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="17dp"
android:text="@string/language_locale"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Spinner
android:id="@+id/language_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_toRightOf="@+id/textView1"
android:layout_alignBaseline="@+id/textView1"
android:entries="@array/locale_arrays"
android:prompt="@string/locate_prompt"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/spinner1"
android:layout_marginTop="37dp"
android:text="@string/pitch"
android:textAppearance="?android:attr/textAppearanceMedium" />
<SeekBar
android:id="@+id/pitchBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/pitchBar"
android:layout_marginTop="27dp"
android:text="@string/speed"
android:textAppearance="?android:attr/textAppearanceMedium" />
<SeekBar
android:id="@+id/speedBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView3"
android:layout_marginTop="18dp" />
</RelativeLayout>
locale_string.xml (string resources for the spinner) locale_string.xml (微调器的字符串资源)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="locate_prompt">Select Language</string>
<string-array name = "locale_arrays">
<item>English</item>
<item>Chinese</item>
<item>French</item>
<item>Germany</item>
<item>Italian</item>
<item>Japanese</item>
<item>Korean</item>
</string-array>
</resources>
Java Code Java代码
//Event Handler for the language spinner
private class LanguageSpinnerHandler implements OnItemSelectedListener
{
int result = 0;;
@Override
public void onItemSelected(AdapterView<?> parent, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
if(parent.getItemAtPosition(position).toString()=="English")
{
result = tts.setLanguage(Locale.UK);
}
else if(parent.getItemAtPosition(position).toString()=="Chinese")
{
result = tts.setLanguage(Locale.CHINESE);
}
else if(parent.getItemAtPosition(position).toString()=="French")
{
result = tts.setLanguage(Locale.FRENCH);
}
else if(parent.getItemAtPosition(position).toString()=="Germany")
{
result = tts.setLanguage(Locale.GERMANY);
}
else if(parent.getItemAtPosition(position).toString()=="Italian")
{
result = tts.setLanguage(Locale.ITALIAN);
}
else if(parent.getItemAtPosition(position).toString()=="Japanese")
{
result = tts.setLanguage(Locale.JAPANESE);
}
else
{
result = tts.setLanguage(Locale.KOREAN);
}
if(result==TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
{
Toast.makeText(Talk.this, "This Language is Not Supported in Your Device", Toast.LENGTH_LONG).show();
tts.setLanguage(Locale.UK);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
//show settings
private void showSettings()
{
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.talk_settings);
dialog.setTitle("Settings");
dialog.setCancelable(true);
SeekBar pitchBar = (SeekBar)dialog.findViewById(R.id.pitchBar);
SeekBar speakingSpeedBar = (SeekBar)dialog.findViewById(R.id.speedBar);
pitchBar.setProgress((int) pitchValue);
speakingSpeedBar.setProgress((int)speakingSpeedValue);
pitchBar.setOnSeekBarChangeListener(new PicthBarEvent());
speakingSpeedBar.setOnSeekBarChangeListener(new SpeakingSpeedBarEvent());
Spinner languageSpinner = (Spinner)findViewById(R.id.language_spinner);
languageSpinner.setOnItemSelectedListener(new LanguageSpinnerHandler());
dialog.show();
}
I am getting a NullPointerException
right in here 我在这里得到一个
NullPointerException
languageSpinner.setOnItemSelectedListener(new LanguageSpinnerHandler());
Where I went wrong? 我哪里出问题了?
languageSpinner
belongs to talk_settings.xml
, so you have to look for it inside the dialog
view languageSpinner
属于talk_settings.xml
,因此您必须在dialog
视图中寻找它
Spinner languageSpinner = (Spinner)dialog.findViewById(R.id.language_spinner);
also, String comparison in Java should be performed through the equals
or equalsIgnoreCase
method 另外,Java中的字符串比较应通过
equals
或equalsIgnoreCase
方法执行
Check if languageSpinner
is initialized properly. 检查
languageSpinner
是否正确初始化。
Spinner languageSpinner = (Spinner)dialog.findViewById(R.id.language_spinner);
findViewById
looks for aa view in the current inflated layout. findViewById
在当前展开的布局中查找视图。 So use the dialog object to initialize spinner 因此,使用对话框对象初始化微调器
and use .equals
to compare strings 并使用
.equals
比较字符串
parent.getItemAtPosition(position).toString().equals("English")
Try usion 试试usion
Spinner languageSpinner = (Spinner)dialog.findViewById(R.id.language_spinner);
instead of 代替
Spinner languageSpinner = (Spinner)findViewById(R.id.language_spinner);
. 。
As your spinner is in the talk_settings
XML you will need to find the Spinner
id in the view in which the XML is inflated. 由于您的微调器位于
talk_settings
XML中,因此您需要在XML被放大的视图中找到Spinner
id。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.