Androidとバックグラウンドネットワークが交互にピットを踏みます.

17130 ワード

Androidとバックグラウンドネットワークが交互にピットを踏みます.
Volly
jsonを使ってデータの伝送フォーマットとして前後交互に行います.まずAndroid公式標準装備のvollyを使ってデータをインタラクティブにします.公式に書かれたdemoに従って大丈夫です.公式demoアドレス:
https://developer.android.com/training/volley
しかし、自分が本当に使い始めた時に問題が発生しました.
私のurlは次の通りです
String url = "http://172.20.10.4:9091/project_service/getNodes/           ";
公式に提供された方法を使って400のエラーを報告しています.最初はファイアウォールの問題だと思っていましたが、ファイアウォールを閉めて問題が解決されていません.また、方法を間違えたのではないかと思いました.公式から提供されたStringRequest、JsonObject Request、JsonArayRequestの三つの種類を試しました.Volly 400エラーStockOverflowでの最も一般的な説明は、要求ヘッダに下記のパラメータを入れ忘れてしまい、エラーが発生しました.
headMap.put("Content-Type", "application/json; charset=utf-8");
しかし、要求ヘッドを追加して改善した後、エラーを報告し続けます.ツールを交換しなければなりません.
以下にvollyのデモのサンプルを一部添付します.
//  Volley
				//      
				RequestQueue mQueue = Volley.newRequestQueue(this);
				String url = "http://172.20.10.4:9091/project_service/getNodes/           ";
				JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                  Request.Method.GET,
                  url,
                  null,
                  new Response.Listener<JSONArray>() {
                     @Override
                     public void onResponse(JSONArray response) {
                        // Do something with response
                        //mTextView.setText(response.toString());

                        // Process the JSON
                        Log.e("response",response.toString());
                        textView.setText(response.toString());
                     }
                  },
                  new Response.ErrorListener(){
                     @Override
                     public void onErrorResponse(VolleyError error){
                        // Do something when error occurred
                        Log.e("error",error.toString());
                        textView.setText("don't work");
                     }
                  }
            ){
               @Override
               public Map<String, String> getHeaders() throws AuthFailureError {
//                return super.getHeaders();
                  Map<String,String> headMap = new TreeMap<>();
                  headMap.put("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
                  headMap.put("Accept-Encoding","gzip, deflate");
                  headMap.put("Accept-Language","zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");
                  headMap.put("Content-Type", "application/json; charset=utf-8");
                  headMap.put("Cache-Control","no-cache");
                  headMap.put("Connection","keep-alive");
                  headMap.put("Host","192.168.1.102:9091");
                  headMap.put("Pragma","no-cache");
                  headMap.put("Upgrade-Insecure-Requests","1");
                  headMap.put("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36");
                  return headMap;
               }

               @Override
               public String getBodyContentType() {
                  return "application/json";
               }
            };




			//      
            jsonArrayRequest.setRetryPolicy(
                  new DefaultRetryPolicy
                        (3000,
                              3,
                              DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

			//       
			mQueue.add(jsonArrayRequest);
最後に問題点を発見しました.要求されたurlの中に中国語の文字が現れました.エラーが発生しました.中国語ではない文字のurlをテストして要求した時も間違いがありませんでした.
しかし、エラーが見つかったとしても、データベースに登場する中国語の文字、url中国語の文字をパラメータとして転送するなどいろいろなツールを試してみます.
Http
その後、私はokhttpを見つけました.
直接使うのは面倒くさいので、ギズブの上にオカルトのツールバッグを見つけました.とても簡潔で便利です.
このutilを使用して要求を行います.
OkHttpUtils
      .get()
      .url(url)
      .build()
      .execute(new StringCallback() {
         @Override
         public void onError(Call call, Exception e) {
            Log.e("Exception",e.toString());
            textView.setText(e.toString());
         }

         @Override
         public void onResponse(String response) {
            Log.e("response",response);
            textView.setText(response);
         }
      });
運転して確認しましたが、間違いがないです.
このツールバッグはとても便利です.住所は以下の通りです.
https://github.com/burgessjp/okhttp-utils
csdnで発表されたツールバッグとソースコードの紹介として
Android OkHttpが完全に解析したのは、OkHttpを知る時です.
https://blog.csdn.net/lmj623565791/article/details/47911083
締め括りをつける
  • ネットワークにおけるデータの相互作用は、中国語文字
  • を使用しないようにしてください.
  • バージョンの問題は
  • に注意してください.
  • ツールがだめなら、早く
  • に変えてください.