2012-03-06 158 views
0

我希望有人能夠找到這個問題。我有一個完全在服務器通信中工作的應用程序。不幸的是,當移動到Windows 8 CP時,我失去了Eclipse工作區。我仍然有.apk,並且使用Dex2jar和jd-gui,我能夠挽救很多代碼。我已經把所有這一切都恢復到了工作狀態,但是這一點。我試圖發送一個URL到服務器,並取回字符串響應。這裏的代碼:Android HTTP客戶端問題

import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class login extends Activity{ 

<code> 

public void pushLogin(View paramView){ 

    try{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(loginFinal); 
    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    errorTextView.setText(loginFinal); 

    //code gets here 
    String response = client.execute(request, responseHandler); 
    //does not get here 
    errorTextView.setText(response); 
    } 

我的TextView總是包含字符串loginFinal,我不能讓它顯示響應。爲了檢查這一點,我在嘗試獲取字符串響應後將errorTextView.setText(loginFinal);移至了行。它也沒有在這一點上運行。我正在撕掉我的頭髮,我確信這很簡單。我已經獲得了互聯網許可,我甚至在這個網站上發現了我的這個應用程序部分的原始代碼,因爲我發佈了一個單獨的問題。就我所知,此代碼是相同的。我能想到的唯一變化就是我將我的構建目標從Froyo移到了Honeycomb,因爲我決定要專注於平板電腦。

最好的部分是,當我按下按鈕,觸發pushLogin時,LogCat什麼也不做。它似乎並沒有觸發client.execute(request, responseHandler)

+0

爲什麼不檢查client.execute以查看它是否引發異常。你確定服務器啓動,你想聯繫? – dbryson 2012-03-06 03:39:42

+0

try {}之後的catch塊中有什麼?如果你說它不在client.execute後面執行,我必須假設它正在發生異常。你有沒有在調試器中加入? – Tim 2012-03-06 03:39:52

+0

我有一個catch方法。我對此仍然非常陌生,但我覺得這應該爲某種形式的錯誤加油印象。 'catch(Exception e){ Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG);' 我從來沒有得到錯誤的敬酒。有什麼問題嗎? – 2012-03-06 04:26:56

回答

0

你可能會呼籲UI線程pushLogin(),請注意,線程政策一直以來API等級11(蜂窩),後者以短暫的,不允許網絡操作(包括HttpClient的和HttpURLConnection類)改變得到的用戶界面執行線程,否則你會得到NetworkOnMainThreadException。正確的策略是在後臺線程上調用pushLogin()(AsycnTask就是一個很好的例子)。

希望得到這個幫助。

+0

就是這樣,謝謝。我計劃將它轉移到異步任務。事實上,當我丟失我的代碼時,這正是我正在做的。但是,我想回到我從未嘗試過的新東西之前離開的地方。出於好奇,這是基於建設目標的政策嗎?我問的原因是我運行(基本上)相同的代碼,在同一個ICS電話上的UI線程上的http通信,當目標是8而不是11時,它運行良好。再次感謝您的幫助! – 2012-03-06 04:34:22

+0

這就是爲什麼它在if條件測試中,StrictMode.ThreadPolicy是自API Level 9開始引入的。條件將在運行時檢查。我發佈的代碼適用於所有Android版本。 – yorkw 2012-03-06 08:49:58