【问题标题】:Dealing with deprecated class DefaultHttpClient in my JSON parser在我的 JSON 解析器中处理已弃用的类 DefaultHttpClient
【发布时间】:2017-02-04 08:06:37
【问题描述】:

这是我的 JSON 解析器类,我在其中使用了 DefaultHttpClient。我是这个 android 项目开发的新手,它显示 DefaultHttpClient 已被弃用,我在课堂上的使用被删除了。请帮助我使用不同的 JSON 解析器类作为这个已弃用类的替代解决方案。

    import android.util.Log;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URLEncodedUtils;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;

    public class JSONParser {


static InputStream is = null;
static JSONObject jObj = null;
static JSONArray jArr = null;
static String json = "";
static String error = "";

// constructor
public JSONParser() {

}

// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
                                  ArrayList<NameValuePair> params) {

    // Making HTTP request
    try {

        // check for request method
        if(method.equals("POST")){
            // request method is POST
            // defaultHttpClient
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            try {
                Log.e("API123", " " +convertStreamToString(httpPost.getEntity().getContent()));
                Log.e("API123",httpPost.getURI().toString());
            } catch (Exception e) {
                e.printStackTrace();
            }

            HttpResponse httpResponse = httpClient.execute(httpPost);
            Log.e("API123",""+httpResponse.getStatusLine().getStatusCode());
            error= String.valueOf(httpResponse.getStatusLine().getStatusCode());
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        }else if(method.equals("GET")){
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "?" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
        Log.d("API123",json);
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
        jObj.put("error_code",error);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

private String convertStreamToString(InputStream is) throws Exception {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line);
    }
    is.close();
    return sb.toString();
}
}

我是这个 Android 应用程序开发的新手。

【问题讨论】:

  • DefaultHttpClient 不是 JSON 解析器。它是一个 HTTP 库。如果您想要另一个 HTTP 库,UrlConnection 是内置的,并且存在诸如 Volley 和 RetroFit 之类的第 3 方库。如果你想要一个 JSON 解析器,JSONObject 是内置的,Jackson 和 GSON 是流行的第 3 方。
  • 请不要在您的问题中添加 ASAP 请求 - 急于回答志愿者是不合适的,他们只会在空闲时回答。
  • 我很抱歉匆忙,我的意思是 DefaultHttpclient 作为 JSON 解析器,我附加了我的 json 解析器类

标签: java android json android-asynctask deprecated


【解决方案1】:

考虑使用RetrofitVolley android 网络库。按照链接了解如何配置和使用其中任何一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2012-12-18
    • 2022-11-20
    相关资源
    最近更新 更多