0

自最近几天以来,我一直在尝试寻找答案,但没有运气,即使是一些 stackoverflow 答案也无济于事。

我试图在通过 Android 收到他的 UserToken 后检查用户。我得到了一个FileNotfoundExceptionat getInputStream(),未经身份验证的 API,比如 "https://api.foursquare.com/v2/venues/categories"运行良好。我错过了什么吗?

    URL url = new URL("https://api.foursquare.com/v2/checkins/add?oauth_token="+token);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.addRequestProperty("venueId","12238");
    conn.setDoInput(true);
    conn.setRequestMethod("POST");
    conn.setAllowUserInteraction(true);
    conn.connect();
    InputStream is = conn.getInputStream();
    String response = streamToString(is);
    return response;

经过一番努力,终于解决了这个问题。请看下面我的回答。

4

4 回答 4

1

该类HttpURLConnection具有误导性,因为它将FileNotFoundException为任何 400 或更高的 HTTP 错误代码抛出一个。

所以它不一定是一个不正确的 URL (404),它可能是 400(错误请求)、403(禁止)、500(内部服务器错误)等。

使用该getResponseCode方法可以更准确地指示问题。

于 2013-01-19T17:07:25.260 回答
1

尝试使用与添加场所 ID 相同的方法添加 oauth_token。此外,您的场地 ID 无效,因此请确保您将用户签入到真实场地。

于 2013-01-11T01:38:12.217 回答
0

Okie 我终于设法解决了这个问题,我不知道我上面的代码到底是什么问题,但下面的工作。

此 API 需要 POST 调用,但即使场地 ID 也必须是 URL 的一部分,并且 addRequestProperty 似乎没有正确发送场地 ID。因此我将代码更改为

URL url = new URL("https://api.foursquare.com/v2/checkins/add?venueId=12238&oauth_token="+token);

这解决了问题。谢谢大家

于 2013-01-19T08:38:27.387 回答
0

首先:Yoy 有 https url,并尝试创建 HttpURLConnection。您应该使用 HttpsURLConnection。

第二:您可以尝试添加conn.setDoOutput(true),“post”请求需要它。没有它,尽管在 conn.setRequestMethod("POST") 上,服务器仍可以尝试向您发出 get 请求。您还可以从浏览器插件中检查标题,并将它们放入您的请求中。

于 2013-01-18T15:57:59.200 回答