Android 不推荐的HttpClient?
我正在尝试使用下面的代码从url下载JSON文件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();
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;
}
}