自从过去几天我没有运气,我试着寻找答案,甚至一些stackoverflow的答案都没有用。
我正在尝试通过Android接收用户提示后签入用户。我在FileNotfoundException
获得了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;
经过大量努力后解决这个问题。请参阅下面的答案。
答案 0 :(得分:1)
尝试使用与添加sceneid相同的方法添加oauth_token。此外,您的会员资格无效,因此请确保您正在检查用户是否真实到场。
答案 1 :(得分:1)
HttpURLConnection
类具有误导性,因为它会为任何400或以上的HTTP错误代码抛出FileNotFoundException
。
所以它不一定是错误的URL(404),它可能是400(错误的请求),403(禁止),500(内部服务器错误)等。
使用getResponseCode
方法更准确地指出问题。
答案 2 :(得分:0)
首先:Yoy有https网址,并尝试创建HttpURLConnection。你应该使用HttpsURLConnection。
第二:您可以尝试添加conn.setDoOutput(true),“发布”请求需要它。如果没有它,服务器可以尝试给你一个get请求,尽管conn.setRequestMethod(“POST”)。您还可以检查浏览器插件中的标题,并将其放入您的请求中。
答案 3 :(得分:0)
Okie我终于设法解决了这个问题,我不知道上面的代码究竟是什么问题,但以下工作有效。
此API需要POST调用,但即使是venueID也必须是URL的一部分,addRequestProperty似乎没有正确发送sceneID。因此我将代码更改为
URL url = new URL("https://api.foursquare.com/v2/checkins/add?venueId=12238&oauth_token="+token);
这解决了这个问题。谢谢大家