Beginner Beginner - 6 months ago 93
Java Question

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?

Answer

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