1

解决方案:嗯,在 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

有什么不对吗?

谢谢你。

4

1 回答 1

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;
           }



    }
于 2013-07-15T10:34:06.873 回答