2013-05-07 78 views
3

我完全绝望,这就是为什么我要求你帮忙。我有一个Android应用程序下面的代码:Android上的HTTP请求

public void OnButtonClick(View view) throws ClientProtocolException, IOException, Exception 
{  
    URL yahoo = new URL("http://privyrobsi.sk/brigades/getBrigades.json"); 
    URLConnection yc = yahoo.openConnection(); 
    BufferedReader in = new BufferedReader(
          new InputStreamReader(
          yc.getInputStream())); 
    String inputLine; 

    EditText ET = (EditText) findViewById(R.id.editText2); 
    while ((inputLine = in.readLine()) != null) ET.setText(ET.getText()+inputLine);   
    in.close();   
} 

我得到这个代码here,我只是修改了一些。 当我尝试将代码作为独立的Java应用程序运行时,它可以正常工作。但是当我尝试在android中使用它时,模拟器说不幸的是,应用程序停止了。 我保存了LogCat的日志here。 我的清单文件中也有使用权限android:name =“android.permission.INTERNET”。

回答

4

您无法在主线程中执行网络操作。在asynctask中执行此操作。

更新:

你logcat的数据显示你有NetworOnMainThreadException。根据doc

应用程序尝试在其主线程上执行联网操作时引发的异常。

这仅适用于针对Honeycomb SDK或 的应用程序。针对早期SDK版本的应用程序允许在其主要事件循环线程上执行联网,但不鼓励 。

解决方案:

正如我已经提到的,你必须使用一个不同的线程来执行网络操作。您可以使用以下

  1. 的AsyncTask
  2. Differet工作者线程
  3. 处理器

检查这个thread。这个问题的答案涵盖了几乎所有的解决方案