Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 826
Gunnar Bernstein Avatar asked Mar 23 '15 21:03

Gunnar Bernstein


5 Answers

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();
}
like image 59
Peter Knut Avatar answered Sep 29 '22 20:09

Peter Knut


You could just use a

HashMap<String,Object>

and pass the HashMap b/w methods.

like image 43
Karim Varela Avatar answered Sep 28 '22 20:09

Karim Varela


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;
}
like image 26
AndersonCanteiro Avatar answered Sep 25 '22 20:09

AndersonCanteiro


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

like image 20
Andrea Motto Avatar answered Sep 28 '22 20:09

Andrea Motto


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();
}
like image 35
Pradyumna Sahoo Avatar answered Sep 25 '22 20:09

Pradyumna Sahoo