Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不推荐的HttpClient?_Android_Json - Fatal编程技术网

Android 不推荐的HttpClient?

Android 不推荐的HttpClient?,android,json,Android,Json,我正在尝试使用下面的代码从url下载JSON文件 try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity();

我正在尝试使用下面的代码从url下载JSON文件

 try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection " + e.toString());
    }
然而,android studio显示HttpClient、DefaultHttpClient、HttpPost被抹黑了。我试过用谷歌搜索上面所有不推荐的选项和我能想到的其他变体,但找不到任何有用的结果,所以我显然遗漏了一些东西


如果您不介意使用gson,从url下载json文件的正确方法是什么

String someUrl = "http://freegeoip.net/json/";

URL url = new URL(someUrl);
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.connect();

JsonParser jp = new JsonParser();
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
JsonObject rootobj = root.getAsJsonObject();
someProperty= rootobj.get("some_property").getAsString();
或者你可以使用

import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;

public class JSONParser {

    String charset = "UTF-8";
    HttpURLConnection conn;
    DataOutputStream wr;
    StringBuilder result;
    URL urlObj;
    JSONObject jObj = null;
    StringBuilder sbParams;
    String paramsString;

    public JSONObject makeHttpRequest(String url, String method,
                                      HashMap<String, String> params) {

        sbParams = new StringBuilder();
        int i = 0;
        for (String key : params.keySet()) {
            try {
                if (i != 0){
                    sbParams.append("&");
                }
                sbParams.append(key).append("=")
                        .append(URLEncoder.encode(params.get(key), charset));

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            i++;
        }

        if (method.equals("POST")) {
            // request method is POST
            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(true);

                conn.setRequestMethod("POST");

                conn.setRequestProperty("Accept-Charset", charset);

                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);

                conn.connect();

                paramsString = sbParams.toString();

                wr = new DataOutputStream(conn.getOutputStream());
                wr.writeBytes(paramsString);
                wr.flush();
                wr.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else if(method.equals("GET")){
            // request method is GET

            if (sbParams.length() != 0) {
                url += "?" + sbParams.toString();
            }

            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(false);

                conn.setRequestMethod("GET");

                conn.setRequestProperty("Accept-Charset", charset);

                conn.setConnectTimeout(15000);

                conn.connect();

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

        }

        try {
            //Receive the response from the server
            InputStream in = new BufferedInputStream(conn.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            result = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

            Log.d("JSON Parser", "result: " + result.toString());

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

        conn.disconnect();

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

        // return JSON Object
        return jObj;
    }
}
导入android.util.Log;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.BufferedInputStream;
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.UnsupportedEncodingException;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.net.urlcoder;
导入java.util.HashMap;
公共类JSONParser{
字符串charset=“UTF-8”;
httpurl连接连接;
数据输出流;
结果;
URL-urlObj;
JSONObject jObj=null;
字符串生成器sbParams;
字符串参数字符串;
公共JSONObject makeHttpRequest(字符串url、字符串方法、,
HashMap参数){
sbParams=新的StringBuilder();
int i=0;
for(字符串键:params.keySet()){
试一试{
如果(i!=0){
sbParams.append(“&”);
}
sbParams.append(键).append(“”)
.append(URLEncoder.encode(params.get(key),charset));
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
i++;
}
if(方法等于(“POST”)){
//请求方法为POST
试一试{
urlObj=新URL(URL);
conn=(HttpURLConnection)urlObj.openConnection();
连接设置输出(真);
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“接受字符集”,字符集);
连接设置读取超时(10000);
连接设置连接超时(15000);
连接();
paramsString=sbParams.toString();
wr=新的DataOutputStream(conn.getOutputStream());
writeBytes(paramsString);
wr.flush();
wr.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
else if(method.equals(“GET”)){
//请求方法是GET
如果(sbParams.length()!=0){
url+=“?”+sbParams.toString();
}
试一试{
urlObj=新URL(URL);
conn=(HttpURLConnection)urlObj.openConnection();
连接设置输出(假);
conn.setRequestMethod(“GET”);
conn.setRequestProperty(“接受字符集”,字符集);
连接设置连接超时(15000);
连接();
}捕获(IOE异常){
e、 printStackTrace();
}
}
试一试{
//从服务器接收响应
InputStream in=新的BufferedInputStream(conn.getInputStream());
BufferedReader reader=新的BufferedReader(新的InputStreamReader(in));
结果=新的StringBuilder();
弦线;
而((line=reader.readLine())!=null){
结果。追加(行);
}
Log.d(“JSON解析器”,“结果:+result.toString());
}捕获(IOE异常){
e、 printStackTrace();
}
连接断开();
//尝试将字符串解析为JSON对象
试一试{
jObj=新的JSONObject(result.toString());
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
//返回JSON对象
返回jObj;
}
}

是,HttpClient已弃用。您可以使用HttpUrlConnection或任何良好的第三方库,如volley或改装等。使用volley库您可以使用任何restAPI库,如volley、okHttp或asynchttpclient。如果您真的想使用自己的方式获取json,那么您可以使用OpenUrlConnection类来获取json。希望它能对你有所帮助。使用截击库
use this HttpClient httpClient = HttpClientBuilder.create().build();
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;

public class JSONParser {

    String charset = "UTF-8";
    HttpURLConnection conn;
    DataOutputStream wr;
    StringBuilder result;
    URL urlObj;
    JSONObject jObj = null;
    StringBuilder sbParams;
    String paramsString;

    public JSONObject makeHttpRequest(String url, String method,
                                      HashMap<String, String> params) {

        sbParams = new StringBuilder();
        int i = 0;
        for (String key : params.keySet()) {
            try {
                if (i != 0){
                    sbParams.append("&");
                }
                sbParams.append(key).append("=")
                        .append(URLEncoder.encode(params.get(key), charset));

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            i++;
        }

        if (method.equals("POST")) {
            // request method is POST
            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(true);

                conn.setRequestMethod("POST");

                conn.setRequestProperty("Accept-Charset", charset);

                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);

                conn.connect();

                paramsString = sbParams.toString();

                wr = new DataOutputStream(conn.getOutputStream());
                wr.writeBytes(paramsString);
                wr.flush();
                wr.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else if(method.equals("GET")){
            // request method is GET

            if (sbParams.length() != 0) {
                url += "?" + sbParams.toString();
            }

            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(false);

                conn.setRequestMethod("GET");

                conn.setRequestProperty("Accept-Charset", charset);

                conn.setConnectTimeout(15000);

                conn.connect();

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

        }

        try {
            //Receive the response from the server
            InputStream in = new BufferedInputStream(conn.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            result = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

            Log.d("JSON Parser", "result: " + result.toString());

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

        conn.disconnect();

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

        // return JSON Object
        return jObj;
    }
}