Trying to fetch JSON with Android using Unirest

帅比萌擦擦* 提交于 2019-12-13 06:28:21

问题


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?


回答1:


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



回答2:


I think the better solution would be to use the Volley library. Take a look at my solution, don't forget to add a dependency: compile 'com.android.volley:volley:1.0.0'. If you need more information.

RequestQueue requestQueue = Volley.newRequestQueue(this);
String uri = Uri.parse("https://wordsapiv1.p.mashape.com/words/incredible/definitions")
    .buildUpon()
    .build().toString();

StringRequest stringRequest = new StringRequest(
    Request.Method.GET, uri, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("VolleyResponse", "response: " + response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VolleyError", error.toString());
        }
    }) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String>  params = new HashMap<>();
            params.put("X-Mashape-Key", "<API_KEY>");
            params.put("Accept", "text/plain");
            return params;
        }
    };
    requestQueue.add(stringRequest);


来源:https://stackoverflow.com/questions/35808878/trying-to-fetch-json-with-android-using-unirest

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!