【问题标题】:Android multiple input q parameters in Google Translate API , with volley java谷歌翻译 API 中的 Android 多输入 q 参数,带有 volley java
【发布时间】:2020-10-28 05:04:46
【问题描述】:

如何发送多个q输入文本?如我所见,API 不允许 q[] 类型的数组,而是使用多个 q 参数。

        protected Map<String,String> getParams(){
            List<String> textString  = new ArrayList<>();
            Map<String,String> params = new HashMap<String, String>();
            params.put("key", "key");
            params.put("target", "DE");          
            params.put("q", text);
            return params;
        }
    };

【问题讨论】:

    标签: java android android-studio android-volley


    【解决方案1】:

    我找到了以下帮助类:

    class HttpParams extends HashMap<String, List<String>> {
          private static final long serialVersionUID = 1L;
    
            public HttpParams() {
                super();
            }
    
            public HttpParams(int capacity) {
                super(capacity);
            }
    
            public HttpParams(Map<String, List<String>> map) {
                super(map);
            }
    
            public HttpParams(int capacity, float loadFactor) {
                super(capacity, loadFactor);
            }
    
            /*
             * This is the method to use for adding post parameters
             */
            public void add(String key, String value) {
                if (containsKey(key)) {
                    get(key).add(value);
                }
                else {
                    ArrayList<String> list = new ArrayList<String>();
                    list.add(value);
                    put(key, list);
                }
            }
    
            /**
             * Converts the Map into an application/x-www-form-urlencoded encoded string.
             */
            public byte[] encodeParameters(String paramsEncoding) {
                StringBuilder encodedParams = new StringBuilder();
                try {
                    for (Map.Entry<String, List<String>> entry : entrySet()) {
                        String key = URLEncoder.encode(entry.getKey(), paramsEncoding);
                        for (String value : entry.getValue()) {
                            encodedParams.append(key);
                            encodedParams.append('=');
                            try {
                                encodedParams.append(URLEncoder.encode(value, paramsEncoding));
                            } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                            }
                            encodedParams.append('&');
                        }
                    }
                    return encodedParams.toString().getBytes(paramsEncoding);
                } catch (UnsupportedEncodingException uee) {
                    throw new RuntimeException("Encoding not supported: " + paramsEncoding,     uee);
                }
            }
        }
    

    然后在扩展 Request 的 Main 类中覆盖了 getBody():

    public void volleyPost(String text,OnServiceResponseListener onServiceResponseListener){
      
            String URL = "Your Url here";
            RequestQueue requestQueue = Volley.newRequestQueue(this);
            HttpParams mParams = new HttpParams();
            mParams.add("key", "key");
            mParams.add("target", "languageCode");
          
            String wordsArray [] = text.split(",");
            for(int i = 0;i<wordsArray.length;i++) {
                mParams.add("q", wordsArray[i]);
            }
    
            StringRequest stringRequest = new StringRequest(Request.Method.POST, URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            onServiceResponseListener.onSuccess(response);
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                          onServiceResponseListener.onFailed(error.getMessage());
                        }
                    }){
    
    
                @Override
                public byte[] getBody() throws AuthFailureError {
                    if (mParams != null && mParams.size() > 0) {
                        Log.d(TAG,"mParams--->"+new Gson().toJson(mParams));
                        return mParams.encodeParameters(getParamsEncoding());
                    }
                    return null;
                }
            };
            requestQueue.add(stringRequest);
        }
    

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2023-03-09
      • 2015-10-13
      • 2011-12-26
      • 2010-10-10
      相关资源
      最近更新 更多