since Android 22 NameValuePair is deprecated.
The documentation sends me to an article about openConnection, but that is what I do. So how is it replaced properly?
I know I can still use it and a string has to be build, just figuring how to pass data between methods.
You can use ContentValues instead of list of NameValuePair.
Creating:
ContentValues values = new ContentValues();
values.put("key1", "value1");
values.put("key2", 123);
Usage:
for (Map.Entry<String, Object> entry : values.valueSet()) {
String key = entry.getKey();
String value = entry.getValue().toString();
}
You could just use a
HashMap<String,Object>
and pass the HashMap b/w methods.
Try this code, i use on my applications and works
public String post(JSONObject object) throws Exception {
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;
}
I recommend using Volley, an HTTP library that makes networking for Android apps easier and most importantly, faster.
Use Java HttpUrlConnection
With a Map
/Hashmap
, if you don't want to use the Apache library as legacy.
/**
*
* @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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With