异步任务:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

时间:2014-05-15 18:35:27

标签: java android multithreading

我在尝试获取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());
        }

    }
}

1 个答案:

答案 0 :(得分:0)

在AsyncTask中:

doInBackground - 在后台线程上调用,用于执行后台计算。

onPostExecute - 在后台计算完成后在UI线程上调用。所有UI更新/启动新活动必须在AsyncTask的onPostExecute函数上完成。

请参阅以下documentation

将以下内容添加到AsyncTask中以使其正常工作:

protected void onPostExecute(Long result) {
     postData(methodToRun);
 }

methodToRun可以是成员变量