解决方案:嗯,Android 4.0上不允许http请求,因为它会持续很长时间,ui会冻结。有必要开始一个新的线程。
首先,这是我的第一篇文章,对不起,如果我做错了。
好吧,我正在尝试从我的应用程序的foursquare获取一个场地列表。我搜索了很多,但我还是没有找到答案。这是我第一次使用foursquare api和json,但我不知道问题出在哪里或者我做错了什么。当我尝试从url(.openStream())获取流时代码失败。我正试图通过无用户请求获取场地列表。
所以这是我的代码,如果有人可以帮助我,我会非常感激!谢谢。
String url = "https://api.foursquare.com/v2/venues/search?intent=checkin&ll="+str+"&client_id="+client_id+"&client_secret="+client_secret+"&v="+currentDateandTime+"&limit=15";
try{
URL urlend = new URL(url);
URLConnection urlConnection = urlend.openConnection();
InputStream in = (InputStream)urlend.openStream();
String JSONReponse = CharStreams.toString(new InputStreamReader(in, "UTF-8"));
JSONObject jsonObject = new JSONObject(JSONReponse);
JSONObject reponseJson= jsonObject.getJSONObject("reponse");
JSONArray arrayVenues= reponseJson.getJSONArray("venues");
final String[] names= new String[15];
final String[] venuesId= new String[15];
for (int i=0;i< arrayVenues.length(); i++)
{
JSONObject jObj= arrayVenues.getJSONObject(i);
names[i]= jObj.getString("name");
venuesId[i]= jObj.getString("id");
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);
listView.setAdapter(adapter);
}
} catch(Exception e){
// In your production code handle any errors and catch the individual exceptions
e.printStackTrace();
}
编辑: 我从这里尝试了其他解决方案:
http://stackoverflow.com/questions/7281283/android-webrequest-simple-solution
当它执行该指令时“response = httpclient.execute(httpget);”跳起来再次抓住。在这一个
HttpClient httpclient = new DefaultHttpClient();
当我调试并且我专注于它时出现了这个 http://i44.tinypic.com/33nyscg.png
有什么问题?
谢谢。
答案 0 :(得分:2)
试试这个
private class GetChildList extends AsyncTask<String, Void, String>{
private String strm = "22.81,89.55";
private String client_id = "xxx";
private String client_secret = "xxx";
private String currentDateandTime = "20130715"; //yyyymmdd
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
DefaultHttpClient httpclient = new DefaultHttpClient();
final HttpParams httpParams = httpclient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 30000);
HttpConnectionParams.setSoTimeout(httpParams, 30000);
HttpGet httppost = new HttpGet("https://api.foursquare.com/v2/venues/search?intent=checkin&ll="+strm+"&client_id="+client_id+"&client_secret="+client_secret+"&v="+currentDateandTime); //
try{
HttpResponse response = httpclient.execute(httppost); //response class to handle responses
jsonResult = inputStreamToString(response.getEntity().getContent()).toString();
JSONObject object = new JSONObject(jsonResult);
}
catch(ConnectTimeoutException e){
Toast.makeText(getApplicationContext(), "No Internet", Toast.LENGTH_LONG).show();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonResult;
}
protected void onPostExecute(String Result){
try{
Toast.makeText(getApplicationContext(), "R E S U L T :"+jsonResult, Toast.LENGTH_LONG).show();
System.out.println(jsonResult);
//showing result
}catch(Exception E){
Toast.makeText(getApplicationContext(), "Error:"+E.getMessage(), Toast.LENGTH_LONG).show();
}
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
e.printStackTrace();
}
return answer;
}
}