我知道StackOverflow上有很多关于这个主题的表单,但没有一个固定的工作对我来说。
当我运行代码时:
muteText.setText("Testing")
我收到错误。
MainActivity.java
//Class Variables
Button startTime;
Button endTime;
TextView muteTime;
TextView unmuteTime;
int hour;
int minute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Define Variables
startTime = (Button)findViewById(R.id.startButton);
endTime = (Button)findViewById(R.id.endTime);
muteTime = (TextView)findViewById(R.id.muteText);
Log.i("SchedMute", "muteTime: " + muteTime.getText().toString());
unmuteTime = (TextView)findViewById(R.id.unmuteTime);
//Button Listeners
startTime.setOnClickListener(this);
endTime.setOnClickListener(this);
//--\\
hour = 0;
minute = 0;
}
public void onClick(View v){
int id = v.getId();
if(id == R.id.startButton){ //Selecting time 2 Mute phone
showTimePickerDialog(v);
}
}
public void setStartTime(){
muteTime.setText("Testing Testing 123");
}
(最后一个方法(setStartTime)发生错误)
我通过这样做在另一个类中调用该方法:
MainActivity activity = new MainActivity();
activity.setStartTime();
我花了30分钟试图弄清楚这个。 错误:
07-29 12:29:44.034 19958-19958/myApp.com.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: myApp.com.app, PID: 19958
java.lang.NullPointerException
at myApp.com.app.MainActivity$TimePickerFragment.onTimeSet(MainActivity.java:96)
at android.app.TimePickerDialog.tryNotifyTimeSet(TimePickerDialog.java:223)
at android.app.TimePickerDialog.onClick(TimePickerDialog.java:173)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:170)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5678)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:5)
MainActivity activity = new MainActivity();
您可以 NOT 使用Activity
正确创建new
的实例。永远不要试图这样做,它不会给你你期望的行为。
如果您需要从附加到Activity
的{{1}}调用方法,则应使用已批准的方法来使用“回调”界面。
请参阅Communicating with Other Fragments的以下内容 - 即使是与其他Fragment
进行通信,也是Fragments
与Fragment
进行通信的方式到。
答案 1 :(得分:0)
在Activity创建完成之前调用setText。您需要从新的Activity onCreate()调用该函数。
答案 2 :(得分:0)
你永远不应该调用Activity的构造函数。如果这样做,其活动生命周期都不会发生。我猜你在时间选择器对话框中这样做,你应该使该活动成为一个监听器(或传入一个匿名的内部类监听器)来处理设定的时间。