【问题标题】:java.lang.IllegalArgumentException: Host name may not be nulljava.lang.IllegalArgumentException:主机名不能为空
【发布时间】:2014-06-27 22:56:41
【问题描述】:

大家好,我在这里发布我的问题,因为我已经浏览了所有帖子,但对我的问题没有任何帮助。我正在使用 jersey web 服务并尝试通过 android 手机通过 URL 访问。我想从 web 服务打印你好消息,但它总是抛出 java.lang.IllegalArgumentException Host name may not be null,添加互联网权限, 请检查我的活动

公共类 MainActivity 扩展 Activity {

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


    EditText content = (EditText)this.findViewById(R.id.editText1);


    // Creating HTTP client
    HttpClient httpClient = new DefaultHttpClient();


    // Creating HTTP Post
    HttpGet httpget = new HttpGet("http://localhost:10.0.2.2:8009/BookService/rest/bookresource/hello");

HttpResponse res;
        try {
            res = httpClient.execute(httpget);


            BufferedReader br = null;
            StringBuilder sb = new StringBuilder();

            String line;


    br = new BufferedReader(new InputStreamReader(res.getEntity().getContent()));
            while ((line = br.readLine()) != null) {
                    sb.append(line);

                }

                 content.setText(sb);

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

}

}

这里是 logcat 输出

05-10 01:38:24.768: D/AndroidRuntime(1438): Shutting down VM
05-10 01:38:24.768: W/dalvikvm(1438): threadid=1: thread exiting with uncaught exception (group=0xb4b0cba8)
05-10 01:38:24.818: E/AndroidRuntime(1438): FATAL EXCEPTION: main
05-10 01:38:24.818: E/AndroidRuntime(1438): Process: com.example.androidhttp, PID: 1438
05-10 01:38:24.818: E/AndroidRuntime(1438): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidhttp/com.example.androidhttp.MainActivity}: **java.lang.IllegalArgumentException: Host name may not be null**

05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.os.Handler.dispatchMessage(Handler.java:102)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.os.Looper.loop(Looper.java:136)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.ActivityThread.main(ActivityThread.java:5017)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at java.lang.reflect.Method.invokeNative(Native Method)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at java.lang.reflect.Method.invoke(Method.java:515)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at dalvik.system.NativeStart.main(Native Method)
05-10 01:38:24.818: E/AndroidRuntime(1438): Caused by: java.lang.IllegalArgumentException: Host name may not be null
05-10 01:38:24.818: E/AndroidRuntime(1438):     at org.apache.http.HttpHost.<init>(HttpHost.java:83)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at org.apache.http.impl.client.AbstractHttpClient.determineTarget(AbstractHttpClient.java:497)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at com.example.androidhttp.MainActivity.onCreate(MainActivity.java:59)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.Activity.performCreate(Activity.java:5231)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-10 01:38:24.818: E/AndroidRuntime(1438):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-10 01:38:24.818: E/AndroidRuntime(1438):     ... 11 more

【问题讨论】:

    标签: android androidhttpclient


    【解决方案1】:
    HttpGet httpget = new HttpGet("http://localhost:10.0.2.2:8009/BookService/rest/bookresource/hello");
    

    您的 URL 的主机是 http://localhost:10.0.2.2:8009/,因此无效.. 将其更改为 http://localhost:8009/http://10.0.2.2:8009/ 应该可以解决它。错误的 URL 可能会在处理 URL 的 HttpGet 中导致异常,并向其余代码返回空值

    【讨论】:

    • 嘿 Gary,谢谢你的回复,我按照你说的做了修改,logcat 中没有错误,但是没有从服务器收到任何消息,可能是什么原因??
    • 你是改成localhost还是10.0.2.2?还假设没有其他错误,如果您要直接导航到手机上的该 URL,您会得到什么?
    • 它是 localhost:8009/...,并且在模拟器中显示空白文本字段,这是我想使用 setText 填充消息的内容。检查我的主要活动就是这样。没有来自服务器的消息
    • 如另一个答案中所述,您不能将其设置为 localhost 并期望它在您的手机上运行,​​除非您从中提取结果的 Web 服务器也在该手机上。 localhost 是设备的本地环路 IP 地址,永远不会离开设备本身。您必须将其更改为拥有 Web 服务的计算机/服务器的 IP 地址。
    • 抱歉,它不是手机,它是在我的机器上运行的 avd,它是在我的服务器上运行的。
    【解决方案2】:

    这里是你的网址

    HttpGet httpget = new HttpGet("http://localhost:10.0.2.2:8009/BookService/rest/bookresource/hello");
    

    表示您正在使用本地网络服务。所以你必须在Emulator 而不是android phone device 中运行你的应用程序。所以你需要把它改成http://localhost:8009/,或者http://10.0.2.2:8009/

    【讨论】:

    • Piyush ,它不是电话,它在我的机器上运行,它是我的服务器正在运行的。我将其更改为 localhost:8009/ 没有错误太棒了!但也没有输出。 android emulator.pls 帮助中显示空白文本字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多