1

我的Andoird應用程序需要註冊設備的令牌才能推送通知。到現在爲止,我一直用這個代碼:Java/Android:如何更新已棄用的org.apache.http

final HttpClient httpclient = new DefaultHttpClient(); 
final HttpPost httppost = new HttpPost("http://mysite/registration.php"); 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
Log.e("token:", token); 
Log.e("android_id:", android_id); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
nameValuePairs.add(new BasicNameValuePair("token", token)); 
nameValuePairs.add(new BasicNameValuePair("device", android_id)); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); /***/ 
// Execute HTTP Post Request 
HttpResponse response = httpclient.execute(httppost); /***/ 
String responseBody = EntityUtils.toString(response.getEntity()); /***/ 

不管怎樣,Android的工作室不斷講這個代碼已被棄用,我希望我不是被迫加入Apache的依賴性。例如,我不想在我的build.gradle中有

dependencies { 
    compile group: 'org.apache.httpcomponents' , 
    name: 'httpclient-android' , 
    version: '4.3.5.1' 
} 

那麼,如何更新我的代碼?特別是,我在理解如何使用/ *** /更新行時遇到困難。 感謝您的關注

+0

將這個'useLibrary「org.apache.http.legacy''在'的Android {...}'部分或'build.gradle'文件省心省力;) – Shark

+0

@Shark正如我在我的問題中所說的,我不想使用這樣的棄用類。沒有更好更新的解決方案嗎? –

+1

https://stackoverflow.com/questions/32949626/android-m-org-apache-http-entity-fileentity-deprecated – CommonsWare

回答

0

如果你想擺脫Apache的依賴,你可以切換到HttpURLConnection,這是Android的Java實現的一部分。下面是從文檔的簡單GET例如:

URL url = new URL("http://www.android.com/"); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
try { 
    InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
    readStream(in); 
finally { 
    urlConnection.disconnect(); 
} 

你的情況有點複雜,因爲你通過setEntity POST數據()。以下的答案必須說明如何使用Http(s)URLConnection做到這一點:

https://stackoverflow.com/a/13486223/6055238

+0

感謝您的回覆,但我需要做的是一個外部緩衝區。特別是,我真的不知道如何使用/ *** /使用** HttpURLConnection **來轉換這些行。你能寫下他們嗎? –

+0

我知道這一點,請參考我上面鏈接的答案,它確實如此,甚至給你一個如何將List 轉換爲你需要的輸出的例子。您必須編寫的代碼比現在的代碼稍微複雜一些,但您可以將自己從已棄用的依賴關係中退出。 –

0

你可能也想嘗試或至少看看Android的Volley。有很多關於它的教程。下面是一個示例代碼:

RequestQueue queue = Volley.newRequestQueue(getActivity()); 
    StringRequest sr = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String s) { 
      try{ 
       JSONArray array = new JSONArray(s.toString()); 
       //getting response here 
       } 
      catch(Exception e){ 
       } 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String,String> params = new HashMap<String, String>(); 
      Log.wtf("PID HERE", pid); 
      params.put("token", token); 
      params.put("device", android_id); 
      return params; 
     } 
    };queue.add(sr);