2013-06-18 136 views
0

我想編寫一個使用com.loopj.android.http.AsyncHttpClient的Android應用程序。雖然幾年前我寫了一個Android應用程序,但我很生疏,所以請對我溫柔!Android異步Http客戶端似乎永遠不會回電

在我的應用程序中,我做了一個get,並且沒有調用任何回調虛擬方法。爲了簡化並確保它不屬於我的應用程序,我根據SDK附帶的SupportAppNavigation項目創建了一個新項目。我修改的onCreate代碼如下:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Log.i("com.trumphurst", "Creating AsyncHttpClient"); 
    AsyncHttpClient client = new AsyncHttpClient(); 
    client.setTimeout(5000); 
    Log.i("com.trumphurst", "Getting www.google.com"); 
    client.get("http://www.google.com", new AsyncHttpResponseHandler() { 
     @Override 
     public void onSuccess(String response) { 
      Log.i("com.trumphurst", "Success"); 
     } 
     @Override 
     public void onFailure(Throwable error, String content) { 
      Log.i("com.trumphurst", "Failure"); 
     } 
    }); 
    setListAdapter(new SampleAdapter(querySampleActivities())); 
} 

(請注意,這是唯一的代碼更改我已經到SDK附帶的示例應用程序製造)

我開始在調試器下的應用程序,並監視logcat輸出。我看到「創建AsyncHttpClient」和「獲取www.google.com」,然後什麼都沒有。

我增加了一些權限清單 - 現在開始:

<manifest android:versionCode="1" 
    android:versionName="1" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.support.appnavigation"> 

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<application android:label="@string/app_name"> 
    <activity android:name=".app.AppNavHomeActivity" 
      android:label="@string/app_nav_home_label"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

顯然,我必須做一些錯誤的 - 任何人都可以把我的權利?

+0

您是否在清單文件中添加了必要的權限?我看不出有什麼不對,你已經分享的代碼段。 http://loopj.com/android-async-http/ –

+0

我試着重寫onStart和onFinish,用日誌記錄 - onStart被調用,但onFinish不是。 –

+0

清單中的權限如何?你有他們嗎?您也許需要與我們分享更多的代碼片段,以便讓它們有足夠的感覺。 –

回答

5

我想你忘了在AndroidManifest文件中添加權限:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

瞭解更多關於清單文件here

更新: 這裏是manifes file from loopj github

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.loopj.android.http" 
    android:versionName="1.4.3" 
    android:versionCode="1"> 
    <application 
     android:name="android_async_http"> 
    </application> 
    <uses-sdk android:minSdkVersion="3" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
</manifest> 

爲例,用戶可以在這裏看到INTERNET權限。

+0

謝謝。我已經添加了這些(使用Eclipse友好的編輯器),但它似乎沒有任何區別。 –

+0

我關閉了所有的東西(模擬器和eclipse),並重新啓動,這次它工作。非常感謝 - 我知道這是我沒有做的愚蠢的事情。 –

+0

你有網絡嗎?你有沒有在LogCut中看到什麼?您可以使用源文件而不是Jar文件,並在其中添加更多日誌消息以獲取錯誤信息。這裏是到開源項目的鏈接:https://github.com/loopj/android-async-http – Borys

0

嘗試還將onStart和onComplete方法添加到回調。

與AsyncHttpClient的問題是,它不會拋出一個錯誤,如果你的JSON返回的正確編碼或不

例如我遇到同樣的問題,但注意到onSuccess和onComplete方法都被調用,但不是成功或失敗。發現它是我的服務器返回JSON的方式。我試圖返回一個關聯的字符串數組,我創建了自己並錯過了arrayname的[] infont

問題:$ result = array('result'=>'OK'); 解決方案:$ result [] = array('result'=>'OK');

不是說你將是相同的語法問題,但它不會傷害到 查看什麼是被返回

2

變化AsyncHttpResponseHandler()來TextHttpResponseHandler() 那麼你的覆蓋應該是:

myClient.get(url, new TextHttpResponseHandler() { 

        @Override 
        public void onFailure(int i, Header[] headers, String s, Throwable throwable) { 

        } 

        @Override 
        public void onSuccess(int ii, Header[] headers, String s) { 

        } 

} 
+0

請你詳細說明爲什麼他應該這樣做,因爲接受的答案解決了他的問題? –

相關問題