2014-01-14 28 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