textView.setText()错误 - Android

时间:2015-07-29 17:31:29

标签: android

我知道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)

3 个答案:

答案 0 :(得分:5)

MainActivity activity = new MainActivity();

您可以 NOT 使用Activity正确创建new的实例。永远不要试图这样做,它不会给你你期望的行为。

如果您需要从附加到Activity的{​​{1}}调用方法,则应使用已批准的方法来使用“回调”界面。

请参阅Communicating with Other Fragments的以下内容 - 即使是与其他Fragment进行通信,也是FragmentsFragment进行通信的方式到。

答案 1 :(得分:0)

在Activity创建完成之前调用setText。您需要从新的Activity onCreate()调用该函数。

答案 2 :(得分:0)

你永远不应该调用Activity的构造函数。如果这样做,其活动生命周期都不会发生。我猜你在时间选择器对话框中这样做,你应该使该活动成为一个监听器(或传入一个匿名的内部类监听器)来处理设定的时间。