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の依存関係を追加することを余儀なくされていなかった希望非推奨とされています。たとえば、私は持っていたくない

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

を私のbuild.gradleに入れます。

コードを更新するにはどうすればよいですか?特に、私は/ *** /で行を更新する方法を理解するのが難しいです。 ありがとうございました

+0

;) – Shark

+0

@Shark私が私の質問で言ったように、私はこのような廃止されたクラスを使いたくないでしょう。より良い、より新しい解決策はありませんか? –

+1

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

答えて

0

Apacheの依存関係から解放したい場合は、HttpURLConnectionに切り替えることができます。これはAndroidのJava実装の一部です。ここではドキュメントからの単純なGETの例です:あなたはsetEntityを介してデータをPOSTするので

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

あなたの場合は、()もう少し複雑です。以下の答えはHttp(s)URLConnectionでこれを行う方法について説明します

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

+0

返信いただきありがとうございますが、私がする必要があるのは外部バッファです。特に、私はあなたが言及した** HttpURLConnection **を使って/ *** /でこれらの行をどのように変換するのか本当に分かりません。あなたはそれらを書いてくださいますか? –

+0

私はそれを知っています。上記のリンク先の答えを参考にしてください。それはまさにそのことであり、List を必要な出力に変換する方法の例を示しています。あなたが書かなければならないコードは、あなたが今持っているものよりも少し複雑ですが、あなたはそれに代わって廃止予定の依存から自分自身を解放することができます。 –

0

ます。また、お試しいただくか、少なくともAndroidのVolleyを見てみたいことがあります。それのチュートリアルがたくさんあります。ここではサンプルコードがあります:この `useLibrary「org.apache.http.legacy'``アンドロイド{...} ``一部またはbuild.gradle`ファイル内とあまり心配入れ

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); 
関連する問題