2012-07-11 104 views
0

最近我發佈了一個關於Android HTTP-post AsyncHttpClient的問題。它位於:Android HTTP-post AsyncHttpClient以下是更新的方法。正如你所看到的,這是一個布爾方法。我將done變量作爲全局變量,當用戶單擊Login按鈕時,我檢查postLoginData是否返回true或false。我需要移動到另一個活動,否則我會顯示一個對話框。但是,在新線程中,done被設置爲true,我無法真正讓我的主線程等待,因爲這會導致另一個錯誤。我不確定我的工作應該是什麼。我希望有人發佈一個使用AsyncHttpClient登錄的教程。Android HTTP-post AsyncHttpClient新線程問題

public boolean postLoginData(String userid, String password) { 
    done = false; 
    params1.put("username", ""); 
    params1.put("password", ""); 
    Log.d("addteq", "Start Get Post"); 
    AsyncHttpClient myClient = new AsyncHttpClient(); 
    myClient.post("http://192.168.2.108/htdocs/?action=login", 
      params1, new AsyncHttpResponseHandler() { 
       @Override 
       public void onSuccess(String response) { 
        done = true; 
        System.out.println("login success"); 
       } 
      }); 
    return done; 
} 

回答

3

我的方法是錯誤的。該庫在後臺線程中處理計算: http://loopj.com/android-async-http/ 一個基於Apache的HttpClient庫構建的基於異步回調的Http客戶端。所有請求都在應用程序的主UI線程之外進行,但任何回調邏輯都將在與使用Android的Handler消息傳遞創建的回調相同的線程上執行。

+0

這是您的問題的解決方案,或只是附加信息? – 2012-07-11 15:56:10

0

使用AsyncTask。 在doInBackground(..)的內部運行postLoginData並返回布爾值。然後,AsyncTask會處理它並在主線程中再次運行postExecute(..),您可以在其中啓動新的活動或顯示對話框。