Gunnar Bernstein
Gunnar Bernstein

Reputation: 6222

NameValuePair deprecated

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.

Upvotes: 9

Views: 14819

Answers (5)

Pradyumna Sahoo
Pradyumna Sahoo

Reputation: 9

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();
}

Upvotes: 1

Andrea Motto
Andrea Motto

Reputation: 1550

I recommend using Volley, an HTTP library that makes networking for Android apps easier and most importantly, faster.

Upvotes: 1

AndersonCanteiro
AndersonCanteiro

Reputation: 194

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; }

Upvotes: 2

Peter Knut
Peter Knut

Reputation: 2429

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();
}

Upvotes: 11

Karim Varela
Karim Varela

Reputation: 7652

You could just use a

HashMap<String,Object>

and pass the HashMap b/w methods.

Upvotes: 5

Related Questions