在 FragmentActivity 中单击按钮时出现 NullPointer 异常 android
NullPointer Exception on Onclick of Button in FragmentActivity android
我在我的 Android 应用程序中使用片段,我有两个 class 一个是 FirstClass.java,它扩展了 FragmentActivity 和 SecondClass 扩展了片段并且在其布局文件中有按钮。
因此,在单击该按钮时,我将调用 "mylistener" 函数,如下所示
<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4.64"
android:text="Button"
android:onClick="mylistener"
/>
和FirstClass.java
public class FirstClass extends FragmentActivity {
Button btnSet1;
int mHour = 15;
int mMinute = 15;
/** This handles the message send from TimePickerDialogFragment on setting Time */
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message m){
/** Creating a bundle object to pass currently set Time to the fragment */
Bundle b = m.getData();
/** Getting the Hour of day from bundle */
mHour = b.getInt("set_hour");
/** Getting the Minute of the hour from bundle */
mMinute = b.getInt("set_minute");
/** Displaying a short time message containing time set by Time picker dialog fragment */
Toast.makeText(getBaseContext(), b.getString("set_time"), Toast.LENGTH_SHORT).show();
btnSet1.getText().toString();
btnSet1.setText("set_time");
}
};
public void mylistener(View v){
/** Creating a bundle object to pass currently set time to the fragment */
Bundle b = new Bundle();
/** Adding currently set hour to bundle object */
b.putInt("set_hour", mHour);
/** Adding currently set minute to bundle object */
b.putInt("set_minute", mMinute);
/** Instantiating TimePickerDialogFragment */
TimePickerDialogFragment timePicker = new TimePickerDialogFragment(mHandler);
/** Setting the bundle object on timepicker fragment */
timePicker.setArguments(b);
/** Getting fragment manger for this activity */
FragmentManager fm = getSupportFragmentManager();
/** Starting a fragment transaction */
FragmentTransaction ft = fm.beginTransaction();
/** Adding the fragment object to the fragment transaction */
ft.add(timePicker, "time_picker");
/** Opening the TimePicker fragment */
ft.commit();
};
}
现在我可以在单击 Button 时获得计时器对话框,当试图在 Button 中显示该时间格式时出现 NullPointer 异常,我知道这个异常是因为 FirstClass FragmentActivity 中的按钮声明在这里不存在,请帮我解决这个问题。
03-09 10:40:53.222: E/AndroidRuntime(23637): java.lang.NullPointerException
03-09 10:40:53.222: E/AndroidRuntime(23637): at com.bikepooling.FirstClass.handleMessage(FirstClass.java:63)
03-09 10:40:53.222: E/AndroidRuntime(23637): at android.os.Handler.dispatchMessage(Handler.java:110)
03-09 10:40:53.222: E/AndroidRuntime(23637): at android.os.Looper.loop(Looper.java:193)
03-09 10:40:53.222: E/AndroidRuntime(23637): at android.app.ActivityThread.main(ActivityThread.java:5292)
03-09 10:40:53.222: E/AndroidRuntime(23637): at java.lang.reflect.Method.invokeNative(Native Method)
03-09 10:40:53.222: E/AndroidRuntime(23637): at java.lang.reflect.Method.invoke(Method.java:515)
03-09 10:40:53.222: E/AndroidRuntime(23637): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
03-09 10:40:53.222: E/AndroidRuntime(23637): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
你还没有初始化btnSet1
尝试在 onViewCreated
中执行此操作:
btnSet1 = view.findViewById(R.id.b1);
不需要这个方法,
public void mylistener(View v)
用这个
return new TimePickerDialog(Common.con, mTimeSetListener2, pHour, pMinute, false);
并为 ex
初始化按钮
btn = view.findviewbyid(...);
希望一切顺利,
我在我的 Android 应用程序中使用片段,我有两个 class 一个是 FirstClass.java,它扩展了 FragmentActivity 和 SecondClass 扩展了片段并且在其布局文件中有按钮。 因此,在单击该按钮时,我将调用 "mylistener" 函数,如下所示
<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4.64"
android:text="Button"
android:onClick="mylistener"
/>
和FirstClass.java
public class FirstClass extends FragmentActivity {
Button btnSet1;
int mHour = 15;
int mMinute = 15;
/** This handles the message send from TimePickerDialogFragment on setting Time */
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message m){
/** Creating a bundle object to pass currently set Time to the fragment */
Bundle b = m.getData();
/** Getting the Hour of day from bundle */
mHour = b.getInt("set_hour");
/** Getting the Minute of the hour from bundle */
mMinute = b.getInt("set_minute");
/** Displaying a short time message containing time set by Time picker dialog fragment */
Toast.makeText(getBaseContext(), b.getString("set_time"), Toast.LENGTH_SHORT).show();
btnSet1.getText().toString();
btnSet1.setText("set_time");
}
};
public void mylistener(View v){
/** Creating a bundle object to pass currently set time to the fragment */
Bundle b = new Bundle();
/** Adding currently set hour to bundle object */
b.putInt("set_hour", mHour);
/** Adding currently set minute to bundle object */
b.putInt("set_minute", mMinute);
/** Instantiating TimePickerDialogFragment */
TimePickerDialogFragment timePicker = new TimePickerDialogFragment(mHandler);
/** Setting the bundle object on timepicker fragment */
timePicker.setArguments(b);
/** Getting fragment manger for this activity */
FragmentManager fm = getSupportFragmentManager();
/** Starting a fragment transaction */
FragmentTransaction ft = fm.beginTransaction();
/** Adding the fragment object to the fragment transaction */
ft.add(timePicker, "time_picker");
/** Opening the TimePicker fragment */
ft.commit();
};
}
现在我可以在单击 Button 时获得计时器对话框,当试图在 Button 中显示该时间格式时出现 NullPointer 异常,我知道这个异常是因为 FirstClass FragmentActivity 中的按钮声明在这里不存在,请帮我解决这个问题。
03-09 10:40:53.222: E/AndroidRuntime(23637): java.lang.NullPointerException
03-09 10:40:53.222: E/AndroidRuntime(23637): at com.bikepooling.FirstClass.handleMessage(FirstClass.java:63)
03-09 10:40:53.222: E/AndroidRuntime(23637): at android.os.Handler.dispatchMessage(Handler.java:110)
03-09 10:40:53.222: E/AndroidRuntime(23637): at android.os.Looper.loop(Looper.java:193)
03-09 10:40:53.222: E/AndroidRuntime(23637): at android.app.ActivityThread.main(ActivityThread.java:5292)
03-09 10:40:53.222: E/AndroidRuntime(23637): at java.lang.reflect.Method.invokeNative(Native Method)
03-09 10:40:53.222: E/AndroidRuntime(23637): at java.lang.reflect.Method.invoke(Method.java:515)
03-09 10:40:53.222: E/AndroidRuntime(23637): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
03-09 10:40:53.222: E/AndroidRuntime(23637): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
你还没有初始化btnSet1
尝试在 onViewCreated
中执行此操作:
btnSet1 = view.findViewById(R.id.b1);
不需要这个方法,
public void mylistener(View v)
用这个
return new TimePickerDialog(Common.con, mTimeSetListener2, pHour, pMinute, false);
并为 ex
初始化按钮btn = view.findviewbyid(...);
希望一切顺利,