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