qq_17333539 2016-03-10 14:48 采纳率: 100%
浏览 1561
已采纳

Android 开发中,访问网络的问题

 public class MainActivity extends Activity {
    private EditText address;
    private Button getbutton;
    private TextView text;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //版本4.0后需加这个,不然就报错android.os.NetworkOnMainThreadException
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads().detectDiskWrites().detectNetwork()
                .penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
                .penaltyLog().penaltyDeath().build());
        //
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);
        //初始化

        address = (EditText) findViewById(R.id.address);
        getbutton = (Button) findViewById(R.id.getbutton);
        text = (TextView) findViewById(R.id.text);



        getbutton.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String url = address.getText().toString();
                getPDAServerData(url);
            }
        });

    }

    public void getPDAServerData(String url) {
        HttpClient client = new DefaultHttpClient();
        HttpPost request;

        try {

            request = new HttpPost(url);

            //调用HttpClient对象的execute(HttpUriRequest request)发送请求,返回一个HttpResponse
            HttpResponse response = client.execute(request);

            //返回响应码为200
            if (response.getStatusLine().getStatusCode() == 200) {

                //从响应中获取消息实体
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    String out = EntityUtils.toString(entity);
                    text.setText(out);
                }
            }


        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

请问,

 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads().detectDiskWrites().detectNetwork()
                .penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
                .penaltyLog().penaltyDeath().build());
这段代码的意思是什么呢,为什么不加,就无法执行访问网络的代码语句呢。
  • 写回答

5条回答 默认 最新

  • 黄仕清 2016-03-10 15:06
    关注

    request = new HttpPost(url);
    //调用HttpClient对象的execute(HttpUriRequest request)发送请求,返回一个HttpResponse
    HttpResponse response = client.execute(request);

    这部分是网络操作,必须在子线程执行,没有这段代码就会抛出android.os.NetworkOnMainThreadException;
    而这个StrictMode主要是用来调试程序的,这段代码可以检测到android.os.NetworkOnMainThreadException
    异常并发出警告 penaltyLog()表示将警告输出到LogCat。
    StrictMode 用法:http://www.2cto.com/kf/201503/381354.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名