关于Android 开发中,访问网络的问题 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-03-10 13:49:43 1809 1

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());

这段代码的意思是什么呢,为什么不加,就无法执行访问网络的代码语句呢。

取消 提交回答
全部回答(1)
  • 爵霸
    2019-07-17 18:57:29

    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

    0 0
相关问答

1

回答

移动推送Android SDK:出现“1105,网络不稳定或连接异常错误”或者“10207,无网络连

2020-03-27 22:25:52 916浏览量 回答数 1

1

回答

用户反馈Android SDK:找不到alicloud-android-feedback.aar,如

2020-03-27 21:32:17 492浏览量 回答数 1

0

回答

用户反馈Android SDK:如何关闭沉浸式任务栏?

2017-10-24 10:51:51 1264浏览量 回答数 0

0

回答

android oss sdk添加了回调地址,没有收到回调请求,为啥

2017-05-04 21:19:37 2877浏览量 回答数 0

1

回答

API网关 Android SDK哪里下载

2017-03-08 14:03:16 2250浏览量 回答数 1

1

回答

表格存储Table Store 是否有专门的android SDK?

2017-01-20 15:04:09 2836浏览量 回答数 1

1

回答

Android 推流SDK使用报错

2016-11-04 15:27:25 4026浏览量 回答数 1

1

回答

android移动数据分析sdk 必须设置渠道信息吗?

2016-10-13 13:36:05 1664浏览量 回答数 1

1

回答

Android SDK Manager

2016-06-13 14:36:16 1876浏览量 回答数 1

1

回答

在android sdk manager中下载东西出现怎么图这是什么原因?如何解决?

2016-03-10 08:42:15 1698浏览量 回答数 1
+关注
2
文章
9426
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载