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条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!