NameValuePair 已弃用
NameValuePair deprecated
因为 Android 22 NameValuePair 已弃用。
documentation 将我发送到一篇关于 openConnection 的文章,但我就是这么做的。那么如何正确更换呢?
我知道我仍然可以使用它并且必须构建一个字符串,只是弄清楚如何在方法之间传递数据。
你可以使用
HashMap<String,Object>
并传递 HashMap b/w 方法。
您可以使用 ContentValues 而不是 NameValuePair 列表。
正在创建:
ContentValues values = new ContentValues();
values.put("key1", "value1");
values.put("key2", 123);
用法:
for (Map.Entry<String, Object> entry : values.valueSet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
}
试试这个代码,我在我的应用程序和作品中使用
public String post(JSONObject object) throws Exception {</p>
HttpURLConnection conexao = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
try {
URL url = new URL(URL_WEB_SERVICE_POST);
conexao = (HttpURLConnection) url.openConnection();
conexao.setConnectTimeout(20000);
conexao.setReadTimeout(15000);
conexao.setRequestMethod("POST");
conexao.setDoInput(true);
conexao.setDoOutput(true);
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("parametros", object.toString());
String query = builder.build().getEncodedQuery();
conexao.setFixedLengthStreamingMode(query.getBytes().length);
OutputStream os = conexao.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conexao.connect();
int responseCode = conexao.getResponseCode();
Log.v(Debug.TAG + " reponseCode", String.valueOf(responseCode));
if(responseCode == HttpURLConnection.HTTP_OK){
StringBuilder sb = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
String linha;
while ((linha = br.readLine())!= null){
sb.append(linha);
}
return sb.toString();
}catch (Exception e){
e.printStackTrace();
}
}else{
if(responseCode == HttpURLConnection.HTTP_CLIENT_TIMEOUT){
throw new Exception("Tempo maximo na comunição atingido: "+ conexao.getErrorStream());
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
throw new Exception("Falha de comunicação, verifique sua conexão com a internet");
}finally {
conexao.disconnect();
}
return null;
}
我建议使用 Volley,这是一个 HTTP 库,它使 Android 应用程序的网络更容易,最重要的是,速度更快。
使用 Java HttpUrlConnection
和 Map
/Hashmap
,如果你不想使用 Apache 库作为遗留。
/**
*
* @param postUrl
* @param postParams
* @return response in string
*/
public static String makeServiceCall(final String postUrl, final Map<String, String> postParams) {
Log.e("URL#",postUrl);
StringBuilder responseBuilder = new StringBuilder();
HttpURLConnection conn = null;
try {
final URL mUrl = new URL(postUrl);
conn = (HttpURLConnection) mUrl.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7");
conn.connect();
conn.setReadTimeout(180000);
conn.setConnectTimeout(180000);
final OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(postParams));
writer.flush();
writer.close();
os.close();
final int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = br.readLine()) != null) {
responseBuilder.append(line);
}
} else {
responseBuilder.append("");
}
} catch (MalformedURLException e) {
e.printStackTrace();
responseBuilder.append(e.getMessage());
return responseBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
responseBuilder.append(e.getMessage());
return responseBuilder.toString();
} finally {
if (null != conn) {
conn.disconnect();
}
}
System.gc();
return responseBuilder.toString();
}
/**
* @Param: map , takes in value in key val format
*/
private static String getQuery(final Map<String, String> mPostItems) throws UnsupportedEncodingException {
final StringBuilder result = new StringBuilder();
boolean first = true;
final Set<String> mKeys = mPostItems.keySet();
for (String key : mKeys) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(key, "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(mPostItems.get(key), "UTF-8"));
Log.e("Key#",key+"#"+mPostItems.get(key));
}
return result.toString();
}
因为 Android 22 NameValuePair 已弃用。
documentation 将我发送到一篇关于 openConnection 的文章,但我就是这么做的。那么如何正确更换呢?
我知道我仍然可以使用它并且必须构建一个字符串,只是弄清楚如何在方法之间传递数据。
你可以使用
HashMap<String,Object>
并传递 HashMap b/w 方法。
您可以使用 ContentValues 而不是 NameValuePair 列表。
正在创建:
ContentValues values = new ContentValues();
values.put("key1", "value1");
values.put("key2", 123);
用法:
for (Map.Entry<String, Object> entry : values.valueSet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
}
试试这个代码,我在我的应用程序和作品中使用
public String post(JSONObject object) throws Exception {</p>
HttpURLConnection conexao = null;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
try {
URL url = new URL(URL_WEB_SERVICE_POST);
conexao = (HttpURLConnection) url.openConnection();
conexao.setConnectTimeout(20000);
conexao.setReadTimeout(15000);
conexao.setRequestMethod("POST");
conexao.setDoInput(true);
conexao.setDoOutput(true);
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("parametros", object.toString());
String query = builder.build().getEncodedQuery();
conexao.setFixedLengthStreamingMode(query.getBytes().length);
OutputStream os = conexao.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conexao.connect();
int responseCode = conexao.getResponseCode();
Log.v(Debug.TAG + " reponseCode", String.valueOf(responseCode));
if(responseCode == HttpURLConnection.HTTP_OK){
StringBuilder sb = new StringBuilder();
try{
BufferedReader br = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
String linha;
while ((linha = br.readLine())!= null){
sb.append(linha);
}
return sb.toString();
}catch (Exception e){
e.printStackTrace();
}
}else{
if(responseCode == HttpURLConnection.HTTP_CLIENT_TIMEOUT){
throw new Exception("Tempo maximo na comunição atingido: "+ conexao.getErrorStream());
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
throw new Exception("Falha de comunicação, verifique sua conexão com a internet");
}finally {
conexao.disconnect();
}
return null;
}
我建议使用 Volley,这是一个 HTTP 库,它使 Android 应用程序的网络更容易,最重要的是,速度更快。
使用 Java HttpUrlConnection
和 Map
/Hashmap
,如果你不想使用 Apache 库作为遗留。
/**
*
* @param postUrl
* @param postParams
* @return response in string
*/
public static String makeServiceCall(final String postUrl, final Map<String, String> postParams) {
Log.e("URL#",postUrl);
StringBuilder responseBuilder = new StringBuilder();
HttpURLConnection conn = null;
try {
final URL mUrl = new URL(postUrl);
conn = (HttpURLConnection) mUrl.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7");
conn.connect();
conn.setReadTimeout(180000);
conn.setConnectTimeout(180000);
final OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(postParams));
writer.flush();
writer.close();
os.close();
final int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = br.readLine()) != null) {
responseBuilder.append(line);
}
} else {
responseBuilder.append("");
}
} catch (MalformedURLException e) {
e.printStackTrace();
responseBuilder.append(e.getMessage());
return responseBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
responseBuilder.append(e.getMessage());
return responseBuilder.toString();
} finally {
if (null != conn) {
conn.disconnect();
}
}
System.gc();
return responseBuilder.toString();
}
/**
* @Param: map , takes in value in key val format
*/
private static String getQuery(final Map<String, String> mPostItems) throws UnsupportedEncodingException {
final StringBuilder result = new StringBuilder();
boolean first = true;
final Set<String> mKeys = mPostItems.keySet();
for (String key : mKeys) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(key, "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(mPostItems.get(key), "UTF-8"));
Log.e("Key#",key+"#"+mPostItems.get(key));
}
return result.toString();
}