2014-01-18 70 views
0

我試圖讓網頁上的內容Android的 - HttpClient的錯誤

HttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet("http://www.google.com"); 
HttpResponse response = client.execute(request); 

「client.execute(請求)」被標記爲錯誤,「未處理的異常類型ClientProtocolException」 如何解決?

編輯

使用嘗試捕捉

try{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet("http://www.google.com"); 
    HttpResponse response = client.execute(request);  
}catch(Exception e){ 
    //Handle Error here 
    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); 

    dlgAlert.setMessage("OK OK"); 
    dlgAlert.setTitle("OK"); 
    dlgAlert.setPositiveButton("OK", null); 
    dlgAlert.setCancelable(true); 
    dlgAlert.create().show(); 
} 

和運行應用程序

,警報顯示,

互聯網連接存在。

網絡使用權限加入AndroidManifest.xml中

編輯 我希望得到一個網頁內容,,我也跟着教程和previuos問題,,我嘗試失敗,在這一點上所有代碼。 全碼:

package com.example.internetsql; 

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


import android.app.Activity; 
import android.app.AlertDialog; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 



public void connect(View view) 
{ 

    try{ 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("http://www.google.com"); 
     HttpResponse response = client.execute(request);  
    }catch(Exception e){ 
     //Handle Error here 
     AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); 

     dlgAlert.setMessage("OK OK"); 
     dlgAlert.setTitle("OK"); 
     dlgAlert.setPositiveButton("OK", null); 
     dlgAlert.setCancelable(true); 
     dlgAlert.create().show(); 
    } 





} 



} 
+0

一般來說,這三行代碼應該可以工作......你能粘貼你得到的完整異常嗎? ...你可能需要一個try-catch塊 –

回答

0

你需要或者環繞與try/catch塊的代碼或添加拋出聲明任何方法,這是充分利用調用。

0

您需要從您在其中執行此方法的方法中拋出ClientProtocolException。或者用try,catch塊來處理方法本身內的異常。

try 
{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet("http://www.google.com"); 
    HttpResponse response = client.execute(request); 
} 
catch (ClientProtocolException cpe) 
{ 
    e.printStackTrace(); 
} 

這不僅僅是受涼一般例外,因爲你會發現你可以合理期望得到的異常,但你不會不小心錯過,你沒有想到的異常更好。 (這可能表明代碼中存在錯誤或者出現了錯誤,但您並不期望)。

編輯: Android的設置方式並非如此,它允許您在UI線程中執行潛在的長時間運行任務。像訪問網頁一樣通常應該發生在另一個線程。你會想看看如何使用AsyncTask來做到這一點。

與此同時,將此代碼放在onCreate方法的開始處應暫時解決問題。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

我會強烈建議考慮如何使用互聯網接入的的AsyncTask你開始嘗試做太多的UI線程之前。這可能在模擬器甚至連接到Wifi的設備中工作得相當好,但只要稍微慢一點的移動連接,您的用戶界面在請求運行時就會變得無響應。

+0

我添加了try catch,並且catch行被執行,因爲我解釋了這個問題Edit –