【发布时间】:2018-04-12 14:58:43
【问题描述】:
在 MainActivity 中:
private TextView log;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
log= (TextView) findViewById(R.id.log);
}
public void showMessage(final int messageType, final String msg){
runOnUiThread(new Runnable() {
@Override
public void run() {
log.setText(msg); // here is the problem
}
}
});
在日志类中:
private static MainActivity mainActivity;
public logClass() {
mainActivity = new MainActivity();
}
public void log() {
try {
mainActivity.showMessage(MessageTag.TIP, "Connecting...");
} catch(Exception el) {
el.printStackTrace();
}
}
在调用片段中:
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
new Thread(new Runnable() {
@Override
public void run() {
logClass.log();
}
}).start();
}
}
但我遇到了这个问题:
FATAL EXCEPTION: main
Process: com.test.testing, PID: 7636
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at com.test.testing.MainActivity$2.run(MainActivity.java:97)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
【问题讨论】:
-
看起来您的
log为空。这可能是因为您在activity_main.xml中没有名为 TextView 的log或者您在 MainActivity 中的oncreate方法尚未调用。如果您已将 MainActivity 实例从 MainActivity 本身传递给您的Another类,那么您可以忽略第二种可能性。 -
我更新了这个问题。我想我是从另一个片段中调用它的。
-
如果你愿意,你可以将你的 TextView 设为公开。您可以从其他活动中调用它,例如 MainActivity.textview.settext("");
-
还提供完整的堆栈跟踪。
-
你不能这样调用'mainActivity = new MainActivity();' .您必须从“MainActivity”本身获取此实例。像这样来自 MainActivity , new LogClass(this);其中
this是MainActivity的实例。简而言之,除非您有绝对的理由这样做,否则永远不要自己创建 Activity 类的实例,这是我从未有过的感觉。