Search code examples
androidhttpandroidhttpclient

Connecting and getting JSON response from an open API , HTTP


I have been trying to figure this out on my own going trough tutorials, documentation and searching questions on SO and I cant find a solution. I have connected through tutorials but I have been trying to connect to a API. The Website. I have been trying to get a result but I don't have enough knowledge in this area to solve it myself. I posted how I am trying to implement it. QUESTION: How do I get the JSON response? If you need more information I will update my question. If you believe it is a bad question post why so I can correct myself.

public class JSONTesting extends ActionBarActivity {
    /*
     Example displayed on site: scala/exercise [master] http http://localhost:9000/exercises/category/forearms
     HTTP/1.1 200 OK
     Content-Length: 1606
     Content-Type: application/json
     **Search
     List All Exercises: http http://localhost:9000/exercises/
     Search By Muscle Group:  http http://localhost:9000/exercises/category/forearms
     Search By Letter:  http http://localhost:9000/exercises/a
      */
    TextView textView;
    String LINK = "http://10.0.3.2:9000/exercises/"; //Genymotion (10.0.3.2)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jsontesting);
        textView = (TextView) findViewById(R.id.textView);

        new HttpAsyncTask().execute(LINK + "");
    }

    public static String GET(String url) {
        InputStream inputStream = null;
        String result = "";
        try {
            // create HttpClient
            HttpClient httpclient = new DefaultHttpClient();

            // make GET request to the given URL
            HttpGet httpget = new HttpGet(url);
            httpget.setHeader("Content-Type", "application/json");
            HttpResponse httpResponse = httpclient.execute(httpget);//HostConnection::get() New Host Connection established 0xa4816120, tid 1602

            // receive response as inputStream
            inputStream = httpResponse.getEntity().getContent();
            // convert inputstream to string
            if (inputStream != null) {
                result = convertInputStreamToString(inputStream);
            } else {
                result = "Did not work!";
            }
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }
        return result;
    }

    private static String convertInputStreamToString(InputStream inputStream) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while ((line = bufferedReader.readLine()) != null)
            result += line;
        inputStream.close();
        return result;

    }


    private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            return GET(urls[0]);
        }

        // onPostExecute displays the results of the AsyncTask.
        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
            textView.setText(result);
        }
    }

    // check network connection
    public boolean isConnected() { // Returns Connected
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected())
            return true;
        else
            return false;
    }
}

UPDATE

public class JSONTesting extends ActionBarActivity {

    TextView textView;
    String LINK = "http://10.0.3.2:9000/exercises/"; //Genymotion (10.0.3.2)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jsontesting);
        textView = (TextView) findViewById(R.id.textView);
        new HttpAsyncTask().execute(LINK);
    }

    public static String GET(String url) {
        JSONArray finalResult = null;
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
            StringBuilder builder = new StringBuilder();
            for (String line = null; (line = reader.readLine()) != null; ) {
                builder.append(line).append("\n");
            }
            JSONTokener tokener = new JSONTokener(builder.toString());
            finalResult = new JSONArray(tokener); //This is your JSON result
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }
        return finalResult.toString();
    }


    private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            return GET(urls[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
            textView.setText(result);
        }
    }
}

Solution

  • This is the code snippet I use to get a JSON response from a HttpResponse object. Try changing your GET method to this.

    public static String GET(String url) {
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            BufferedReader reader = new BufferedReader(new    InputStreamReader(response.getEntity().getContent(), "UTF-8"));
            StringBuilder builder = new StringBuilder();
            for (String line = null; (line = reader.readLine()) != null;) {
                builder.append(line).append("\n");
            }
            JSONTokener tokener = new JSONTokener(builder.toString());
            JSONArray finalResult = new JSONArray(tokener); //This is your JSON result
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }
        return finalResult.toString();
    }