2014-01-14 36 views
1

我寫了一個簡單的方法來使用apache HTTPClient獲取一些字符串數據,但是當我在手機上運行時它返回一個空白屏幕;我試圖在textarea中顯示數據。該清單具有互聯網許可。任何人都可以指出我可能做錯了什麼?Android應用返回空白屏幕的HTTP客戶端

public String getInternetData() throws Exception 
{ 
    BufferedReader in = null; 
    String data = null; 
    try 
    { 
     HttpClient client = new DefaultHttpClient(); 
     URI website = new URI("http://www.yahoo.com"); 
     HttpGet request = new HttpGet(); 
     request.setURI(website); 
     HttpResponse response = client.execute(request); 
     in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     StringBuffer sb = new StringBuffer(""); 
     String l = ""; 
     String nl = System.getProperty("line.separator"); 
     while((l=in.readLine())!=null){ 
      sb.append(l+nl); 
     } 
     in.close(); 
     data = sb.toString(); 
     return data; 
    }finally{ 
     if(in !=null){ 
      try{ 
       in.close(); 
       return data; 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

的完整性,我將用我看到數據的代碼。

public class MainActivity extends Activity { 

TextView httpStuff; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    httpStuff = (TextView) findViewById(R.id.tvHttp); 
    GetMethodEx test = new GetMethodEx(); 
    String returned; 
    try { 
     returned = test.getInternetData(); 
     httpStuff.setText(returned); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 
+0

你知道一個HttpClient只是一種通過Http下載的方式,對嗎?我想你正在尋找一個WebView – Codeman

+0

向我們展示顯示數據的代碼。 – wyoskibum

+0

是的。我相信我明白了目的。我已經可以很好地使用網頁瀏覽了。但是,這不是我在這裏尋找的。我想當這個方法運行時,我的方法中的數據字符串不應該是空的,我應該看到一些文本。但我不知道,所以我想知道我做錯了什麼。 – Ammar

回答

1

你是在UI線程錯誤可能越來越網絡,因爲它是在嘗試捕捉,應用心不是崩潰

你應該只在後臺線程調用網絡操作,或AsyncTasks這是偉大的那

有什麼不對您的HTTP客戶端和請求數據,問題確實出在你onCreate方法

嘗試重寫它這樣

public class MainActivity extends Activity { 

TextView httpStuff; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    httpStuff = (TextView) findViewById(R.id.tvHttp); 


    AsyncTask<Void,Void,String>getDataTask = new AsyncTask<Void,Void,String>(){ 
     @Override 
     protected String doInBackground(Void... params){ 
     GetMethodEx test = new GetMethodEx(); 
     String returned = test.getInternalData(); 
     return returned; 

     } 
     @Override 
     protected void onPostExecute(String returned){ 
     httpStuff.setText(returned); 
} 

} 



} 
     getDataTask.execute(); 
} 
+0

是的。我只是想到了這一點。感謝您的回答和評論。 – Ammar