js_g
js_g

Reputation: 71

How to get foursquare venues list - Android

Solution: Well, http request isn't allowed on android 4.0 because it'll a long time and ui will freeze. It's necessary to start a new thread.


first of all, this is my first post, so sorry if I do something wrong.

Well, I'm trying to get a list of venues from foursquare for my app. I've searched a lot but I still not found an answer. This is the first time I use foursquare api and json, but I don't know where is the problem or if I'm doing something wrong. The code fails when I try to get the stream from the url (.openStream()). I'm trying to get the venues list with userless request.

so this is my code, if someone could help me, I'll be so greatful! Thank you.

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

EDIT: I tried other solution from here:

http://stackoverflow.com/questions/7281283/android-webrequest-simple-solution

and when it executes that instruction "response = httpclient.execute(httpget);" jumps to catch again. And in this one

HttpClient httpclient = new DefaultHttpClient();

when I debug and I focus in it appears this http://i44.tinypic.com/33nyscg.png

There is something wrong?

Thank you.

Upvotes: 1

Views: 2402

Answers (1)

Mehdi
Mehdi

Reputation: 540

try this

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



    }

Upvotes: 2

Related Questions