Android Volley MalformedURLException错误的URL

时间:2014-08-05 03:30:07

标签: android android-volley android-networking okhttp

使用Volley发出第二个网络请求后,我总是收到此错误消息。我输入的网址是什么似乎并不重要。 Volley总是声称它格式不正确。

08-04 20:16:26.885  14453-14470/com.thredup.android E/Volley﹕ [994] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Bad URL
java.lang.RuntimeException: Bad URL
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:127)
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
 Caused by: java.net.MalformedURLException: Protocol not found:
        at java.net.URL.<init>(URL.java:176)
        at java.net.URL.<init>(URL.java:125)
        at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:101)
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)

进一步调查,我在HurlStack中添加了几个日志。在

public HttpResponse performRequest(Request<?> request, Map<String, String> additionalHeaders),

失败的请求是REQUEST [ ] 0x0 LOW 26.

因此,HurlStack的第101行:URL parsedUrl = new URL(url);

因空网址失败(request.getUrl()为空)。

我正在使用OkHttpStack(扩展HurlStack)。 关于可能导致这种情况的任何想法?

4 个答案:

答案 0 :(得分:13)

实际上问题在于你的网址没有排球。您的Url不是URI。它中没有协议组件。它需要public String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; 或您想要的任何其他协议。如果你的网址中有http,请确保它的正确形成位置。

例如,您的网址形式应该是这样的

//first socket
var socket1 = socketIOClient('http://localhost:1337', {'forceNew: true});
//second socket
var socket2 = socketIOClient('http://localhost:1337', {'forceNew: true});

不要忘记阅读URL Specification并确保您提供的网址有效。

答案 1 :(得分:4)

确保您已将URL作为JsonObjectRequest或StringRequest中的第二个参数传递。我犯了同样的错误,就像你面对的那样产生了同样的错误。

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.POST, URL, null, ResponseListener, ErrorListener);

答案 2 :(得分:3)

使用 HTTP:// 要么 HTTPS://

您网址的前缀 例: example.com/information.json 把它写成 http://example.com/information.json

答案 3 :(得分:1)

当您点击没有Urlhttp//前缀的https//时会发生此异常。请检查http//是否包含您的网址。 您可以获得更多信息heresee这些链接