我的应用程序在单击按钮后崩溃,但代码执行正常。
public void makeLead(View v) throws Exception {
try {
RegisterTimer rt = new RegisterTimer();
rt.ma = this;
rt.execute(null);
} catch (Exception e) {
e.printStackTrace();
}
}
public void log(String msg)
{
final TextView tv = (TextView)findViewById(R.id.editText);
tv.append(msg);
}
private class RegisterTimer extends AsyncTask {
public MainActivity ma;
@Override
protected Object doInBackground(Object[] objects) {
ma.log("ausd");
return null;
}
}
makeLead
是 onClick
事件。方法 ma.log 生成错误,但工作正常(msg 添加到 textEdit
)。当我删除 ma.log 时,应用程序不会崩溃。我的 AndroidStudio 中没有日志,因此看不到错误消息。怎么了?
最佳答案
您无法触摸非 UI 线程中的View
。
并且您正在后台 Thread
中将文本附加到 TextView
,这是不允许的。
我希望 RegisterTimer
内的 MainActivity
初始化没有问题,因为您没有手动创建 Activity
实例。您的初始化方式是正确的rt.ma = this
。
为什么只需要 AsyncTask
来更改 TextView
的文本?
关于java - Android 从 AsyncTask 访问 MainActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22556057/