2014-05-15 36 views
0

我試圖得到一個 classObject .getNewInstance的新實例(時收到以下java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() )。我已閱讀異步任務:了java.lang.RuntimeException:內螺紋已不叫Looper.prepare無法創建處理程序()

一切涉及改變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

首先你不應該創建活動的實例dervied從代碼級... – Selvin

+3

回去了幾步:你想達到什麼樣的?我相信有更好的方法來做到這一點。 – Henry

+0

同意@Henry。看起來你正試圖從你的主要活動在一個單獨的線程上執行一些方法?即使你想這樣做,我想這種邏輯移動到另一個類,並使用接口/實現定義你真的想調用的,而不是動態地找出需要調用哪些方法。如果您希望因執行任何操作而更新主活動,請使用onPostExecute執行此操作。 – Raghu

回答

0
在的AsyncTask

doInBackground - 上調用後臺線程,用於執行後臺計算。

onPostExecute - 後臺計算finishes.All UI更新/啓動新的活動必須的AsyncTask的onPostExecute函數完成之後的UI線程調用。

請參考下documentation

以下內容添加到您的AsyncTask,使其工作:

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

methodToRun可以是一個成員變量

相關問題