我在尝试获取a的新实例时得到以下java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
classObject .getNewInstance()。
我读到的所有内容都涉及改变UI线程。这是这种情况吗?如果是这样,我该如何解决此异常?
代码(Example used):
public class MainActivityAsyncClass extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
postData(params[0]);
return null;
}
public void postData(String methodToRun) {
Class[] noParams = {};
try {
Class mainActivityClass = Class.forName("com.MainActivity");
Method asyncRun = mainActivityClass.getDeclaredMethod(methodToRun, noParams);
Object obj = mainActivityClass.newInstance(); //<-- Error is thrown here
asyncRun.invoke(obj, null);
} catch(Exception e){
Util.appendLog("Error in async task. Exception: " + e.getMessage() + " " + e.getStackTrace());
}
}
}
答案 0 :(得分:0)
在AsyncTask中:
doInBackground - 在后台线程上调用,用于执行后台计算。
onPostExecute - 在后台计算完成后在UI线程上调用。所有UI更新/启动新活动必须在AsyncTask的onPostExecute函数上完成。
请参阅以下documentation
将以下内容添加到AsyncTask中以使其正常工作:
protected void onPostExecute(Long result) {
postData(methodToRun);
}
methodToRun可以是成员变量