Android HttpResponse - 在模拟器中工作但不在Device中工作

时间:2013-03-18 18:45:29

标签: android httpresponse

我是Android编程的新手。我正在尝试连接并从链接获得响应,例如:https://stackoverflow.com/

我使用HttpResponse来获取响应,然后使用EntityUtils.toString(rp.getEntity())函数将响应转换为字符串。我的代码在模拟器中运行得很好但是当我试图在真正的设备中运行项目,即三星Galaxy Tab 7.0时,它没有运行并说“不幸的是,......已经停止了”。

任何人都可以告诉我为什么会这样,解决方案是什么?代码如下:

    public class MainActivity extends Activity {

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

        TextView txt = (TextView) findViewById(R.id.textView1);
        String pageStr = "***";

        try
        {
            HttpClient hc = new DefaultHttpClient();
            HttpPost post = new HttpPost("https://stackoverflow.com/");

            HttpResponse rp = hc.execute(post);

            if(rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
            {
                pageStr = EntityUtils.toString(rp.getEntity());
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Failed!!", Toast.LENGTH_LONG).show();
            }
        }catch(IOException e){
            e.printStackTrace();
        }  

        txt.setText(pageStr);

    }
}

我在manifest文件中使用了以下权限:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

对此问题的任何帮助或建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

它不起作用,因为你试图在UI线程中访问互联网。

阅读以下链接,它说how to work with internet in separate (non UI) thread