首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android : HttpURLConnection

Android : HttpURLConnection
EN

Stack Overflow用户
提问于 2017-01-05 19:47:00
回答 2查看 1K关注 0票数 0

我试着探索Android并做一些样本。

这是我的密码。

代码语言:javascript
复制
    try
    {
        URL url = new URL("http://google.com");
        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
        uc.setReadTimeout (10 * 1000);

        int rc = uc.getResponseCode();
    }
    catch (Exception e)
    {

    }

如果我在Linux下运行,它就能很好地工作。

但是如果我把它放到安卓系统中,我就会得到getResponseCode的一个空异常。

在Android的模拟器中试用过。网络连接似乎是正常的,Chrome在模拟器中运行良好。

我在onCreate和按钮的点击侦听器中都试过了。它是从java.net进口的。

宣言中确实有

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" />

包括在内。

有什么主意吗?谢谢!

编辑:在称为getResponseCode之后的堆栈跟踪。

代码语言:javascript
复制
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.ch.my1stapplication, PID: 3435
              java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                  at com.example.ch.my1stapplication.MainActivity$4.onClick(MainActivity.java:173)
                  at android.view.View.performClick(View.java:5637)
                  at android.view.View$PerformClick.run(View.java:22429)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-05 20:06:19

代码语言:javascript
复制
 private class Task extends AsyncTask<Void , Void , Void>{
        @Override
        protected Void doInBackground(Void... voids) {
            try
            {
                URL url = new URL("http://google.com");
                HttpURLConnection uc = (HttpURLConnection) url.openConnection();
                uc.setReadTimeout (10 * 1000);

                int rc = uc.getResponseCode();
                Log.d("rc" , rc+"");
            }
            catch (Exception e)
            {

            }
            return null;
        }
    }

 new Task().execute(); 

您需要创建一个线程来处理网络调用。当您在主线程上运行网络调用时,它不会成功地执行程序。

票数 4
EN

Stack Overflow用户

发布于 2017-01-05 20:05:13

看起来,您正在尝试在主UI线程中进行网络连接--这是11+禁止的。您需要使用AsyncTaskAsyncLoader来执行网络调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41493469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档