Search code examples
javaandroidjsonandroid-asynctaskunirest

Trying to fetch JSON with Android using Unirest


Trying to use this "Words API" in an android application which only seems to accept requests using Unirest.

Request example for the definition of "incredible" (specified by api):

HttpResponse<JsonNode> response = Unirest.get("https://wordsapiv1.p.mashape.com/words/incredible/definitions")
  .header("X-Mashape-Key", "**********apikey************")
  .header("Accept", "application/json")
  .asJson();

The trouble is implementing the unirest request with doInBackground in AsyncTask.

protected void OnPreExecute(){
    json_url = "https://wordsapiv1.p.mashape.com/words/incredible/definitions";

    //where does api key go?
}

protected String doInBackground(Void... params) {
        try {               
            // unirest goes here but how? 

            URL url = new URL(json_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder stringBuilder = new StringBuilder();
            while ((JSON_STRING = bufferedReader.readLine()) !=null)
                stringBuilder.append(JSON_STRING+"\n");

            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return stringBuilder.toString().trim();
        }catch (MalformedURLException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Not sure exactly how to structure the request within doInBackground. Is it possible to do this?


Solution

  • This code is not tested but to give you an idea on how you might solve this problem.

    private class TastingUniRestAsync extends AsyncTask<String, Void, String> {
    
        protected String doInBackground(String... urls) {
            String pathToFile = urls[0];
            String responseResult = "";
            HttpResponse<JsonNode> response = Unirest.get(pathToFile)
                    .header("X-Mashape-Key", "**********apikey************")
                    .header("Accept", "application/json")
                    .asJson();
    
            if(null != response){
                //convert your response to the data type you want. Here I am using string
                responseResult = //assign the manipulated Json string;
            }
            return responseResult
        }
        protected void onPostExecute(String responseResult){
            // You can assign it to TextView widget for example
            mTextView.setText(responseResult);
        }
    }