繁体   English   中英

尝试使用Android签入Foursquare时出现FileNotfoundException

[英]FileNotfoundException when trying to checkin Foursquare using Android

我试着寻找这个问题的答案,因为最近几天没有运气,甚至一些stackoverflow的答案也无济于事。

我试图通过Android接收他的UserToken后签入用户。 我在getInputStream()得到一个FileNotfoundException ,像"https://api.foursquare.com/v2/venues/categories"这样的非经过身份验证的API运行良好。 我错过了什么吗?

    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;

经过多方努力后解决了这个问题。 请参阅下面的答案。

尝试使用您用来添加sceneid的相同方法添加oauth_token。 此外,您的会员资格无效,因此请确保您正在检查用户是否有真实的场所。

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

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

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

第一 :Yoy有https url,并尝试创建HttpURLConnection。 你应该使用HttpsURLConnection。

第二 :你可以尝试添加conn.setDoOutput(true),“post”请求需要它。 如果没有它,服务器可以尝试给你一个get请求,尽管conn.setRequestMethod(“POST”)。 您还可以从浏览器插件中检查标题,并将其添加到您的请求中。

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

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

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

这解决了这个问题。 谢谢大家

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM