java.io.FileNotFoundException:https://api.instagram.com/v1/media/search

时间:2014-11-13 21:33:04

标签: android

为什么是以下代码

URL url = new URL(urlStr);

Log.d(TAG, "Opening URL " + url.toString());
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.connect();
String response = streamToString(urlConnection.getInputStream());

总是在urlConnection.getInputStream()给我以下例外?

W/System.err(16253): java.io.FileNotFoundException: https://api.instagram.com/v1/media/search/access_token=1559619173.3c922fe.4fd71e26225a42a0a03fdd90ef8679a6?lat=48.858318956&lng=2.294427258&distance=500
W/System.err(16253):    at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
W/System.err(16253):    at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:246)
W/System.err(16253):    at br.com.dina.oauth.instagram.InstagramApp$5.run(InstagramApp.java:192)

2 个答案:

答案 0 :(得分:4)

您应该删除urlConnection.setDoOutput(true);行,因为setDoOutput方法强制POST但instagram api工作GET方法。

您也可以查看此问题。

https://github.com/thiagolocatelli/android-instagram-oauth/issues/2

答案 1 :(得分:1)

抛出异常的代码可以在okhttp github中找到(Android在内部使用它)。负责的行是:

if (getResponseCode() >= HTTP_BAD_REQUEST) {
    throw new FileNotFoundException(url.toString());
}

这只是意味着您提供的网址没有带来成功的响应。抛出*File*NotFoundException行为okhttp只是从其他实现复制。为什么有人选择这个特殊例外超出了我的范围。

如果您只是将错误消息中的网址放入浏览器中,您会看到“未找到”页面。

解释很简单:您构建的URL错误。而不是

search/access_token=...?lat=...

它需要

search?access_token=...&lat=...

access_token是一个url参数,不是路径的一部分,因此它需要将?作为分隔符,而lat成为第二个参数,这意味着?需要变成&