【问题标题】:How do you use the Android Volley API?您如何使用 Android Volley API?
【发布时间】:2013-07-08 10:46:19
【问题描述】:

我正在考虑在我的下一个项目中实现 Android Volley 库 (Google IO presentation about Volley)。

但是,我还没有为该库找到任何重要的 API。

如何使用 Volley 上传文件、执行 POST/GET 请求以及将 Gson 解析器添加为 JSON 解析器?

Source code

【问题讨论】:

标签: android android-volley


【解决方案1】:

编辑:最后是an official training关于“Volley library”

我找到了一些关于 Volley 库的例子

希望对你有帮助

【讨论】:

  • 有趣的图书馆和很棒的链接!!谢谢@Abdrahmn_msi ^^
  • 我需要关于 volley 的 PATCH 请求的帮助,有人可以帮忙吗?
【解决方案2】:

不幸的是,直到现在还没有像 JavaDocs 这样的 Volley 库的文档。只有 github 上的 repo 和 Internet 上的几个教程。所以唯一好的文档是 source code :) 。当我玩 Volley 时,我读到了这个tutorial

关于 post/get 你可以阅读这个:Volley - POST/GET parameters

希望对你有帮助

【讨论】:

    【解决方案3】:

    这是使用 Volley 发出 POST 请求的插图。 StringRequest 用于获取 String 形式的响应。
    假设您的 REST API 返回一个 JSON。来自您的 API 的 JSON 响应在此处作为字符串接收,您可以再次将其转换为 JSON 并进一步处理它。在代码中添加了 cmets。

    StringRequest postRequest = new StringRequest(Request.Method.POST, "PUT_YOUR_REST_API_URL_HERE",
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            final JSONObject jsonObject = new JSONObject(response);
                            // Process your json here as required
                        } catch (JSONException e) {
                            // Handle json exception as needed
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        String json = null;
                        NetworkResponse response = error.networkResponse;
                        if(response != null && response.data != null){
                            switch(response.statusCode) {
                                default:
                                    String value = null;
                                    try {
                                        // It is important to put UTF-8 to receive proper data else you will get byte[] parsing error.
                                        value = new String(response.data, "UTF-8");
                                    } catch (UnsupportedEncodingException e) {
                                        e.printStackTrace();
                                    }
                                    json = trimMessage(value, "message");
                                    // Use it for displaying error message to user 
                                    break;
                            }
                        }
                        loginError(json);
                        progressDialog.dismiss();
                        error.printStackTrace();
                    }  
                    public String trimMessage(String json, String key){
                        String trimmedString = null;
                        try{
                            JSONObject obj = new JSONObject(json);
                            trimmedString = obj.getString(key);
                        } catch(JSONException e){
                            e.printStackTrace();
                            return null;
                        }
                        return trimmedString;
                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("abc", "pass abc");
                params.put("xyz", "pass xyz");
                // Pass more params as needed in your rest API
        // Example you may want to pass user input from EditText as a parameter
        // editText.getText().toString().trim()
                return params;
            }  
            @Override
            public String getBodyContentType() {
                // This is where you specify the content type
                return "application/x-www-form-urlencoded; charset=UTF-8";
            }
        };
    
        // This adds the request to the request queue
        MySingleton.getInstance(YourActivity.this)
    .addToRequestQueue(postRequest);
    

    // 下面是 MySingleton 类

    public class MySingleton {
        private static MySingleton mInstance;
        private RequestQueue mRequestQueue;
        private static Context mCtx;  
        private MySingleton(Context context) {
            mCtx = context;
            mRequestQueue = getRequestQueue();
        }
    
        public static synchronized MySingleton getInstance(Context context) {
            if (mInstance == null) {
                mInstance = new MySingleton(context);
            }
            return mInstance;
        }
    
        public RequestQueue getRequestQueue() {
            if (mRequestQueue == null) {
                // getApplicationContext() is key, it keeps you from leaking the
                // Activity or BroadcastReceiver if someone passes one in.
                mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
            }
            return mRequestQueue;
        }
    
        public <T> void addToRequestQueue(Request<T> req) {
            getRequestQueue().add(req);
        }
    }
    

    【讨论】:

      【解决方案4】:

      只需将 volley.jar 库添加到您的项目中。 然后

      根据 Android 文档:

      // Instantiate the RequestQueue.
      RequestQueue queue = Volley.newRequestQueue(this);
      String url ="http://www.google.com";
      
      // Request a string response from the provided URL.
      StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                  new Response.Listener<String>() {
          @Override
          public void onResponse(String response) {
              // process your response here
      
          }
      }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
              //perform operation here after getting error
          }            
      });
      // Add the request to the RequestQueue.
      queue.add(stringRequest);
      

      如需更多帮助,请参阅How to user Volley

      【讨论】:

        【解决方案5】:

        简单的方法

         private void load() {
            JsonArrayRequest arrayreq = new JsonArrayRequest(ip.ip+"loadcollege.php",
                    new Response.Listener<JSONArray>() {
        
                        @Override
                        public void onResponse(JSONArray response) {
        
                            Album a;
        
                            try {
                                JSONArray data = new JSONArray(response.toString());
                                for (int i = 0; i < data.length(); i++) {
                                    JSONObject c = data.getJSONObject(i);
                                    one = c.getString("cname").split(",");
                                    two=c.getString("caddress").split(",");
                                    three = c.getString("image").split(",");
                                    four = c.getString("cid").split(",");
                                    five = c.getString("logo").split(",");
        
        
        
        
                                    a = new Album(one[0].toString(),two[0].toString(),ip.ip+"images/"+ three[0].toString(),four[0].toString(),ip.ip+"images/"+ five[0].toString());
                                    albumList.add(a);
        
                                }
                                adapter.notifyDataSetChanged();
        
        
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    // The final parameter overrides the method onErrorResponse() and passes VolleyError
                    //as a parameter
                    new Response.ErrorListener() {
                        @Override
                        // Handles errors that occur due to Volley
                        public void onErrorResponse(VolleyError error) {
                            Log.e("Volley", "Error");
                        }
                    }
            );
            // Adds the JSON array request "arrayreq" to the request queue
            requestQueue.add(arrayreq);
        }
        

        【讨论】:

          【解决方案6】:

          在测试所有上述答案之前,包括

          compile 'com.android.volley:volley:1.0.0'

          在你的 gradle 文件中,不要忘记在你的 Manifest 文件中添加 Internet 权限。

          【讨论】:

            【解决方案7】:

            使用这个类。它为您提供了一种连接数据库的简单方法。

            public class WebRequest {
            
                private Context mContext;
                private String mUrl;
                private int mMethod;
                private VolleyListener mVolleyListener;
            
                public WebRequest(Context context) {
                    mContext = context;
                }
            
                public WebRequest setURL(String url) {
                    mUrl = url;
                    return this;
                }
            
                public WebRequest setMethod(int method) {
                    mMethod = method;
                    return this;
                }
            
                public WebRequest readFromURL() {
                    RequestQueue requestQueue = Volley.newRequestQueue(mContext);
                    StringRequest stringRequest = new StringRequest(mMethod, mUrl, new Response.Listener<String>() {
                        @Override
                        public void onResponse(String s) {
                            mVolleyListener.onRecieve(s);
                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {
                            mVolleyListener.onFail(volleyError);
                        }
                    });
            
                    requestQueue.add(stringRequest);
                    return this;
                }
            
                public WebRequest onListener(VolleyListener volleyListener) {
                    mVolleyListener = volleyListener;
                    return this;
                }
            
                public interface VolleyListener {
                    public void onRecieve(String data);
            
                    public void onFail(VolleyError volleyError);
                }
            }
            

            示例用法:

            new WebRequest(mContext)
                 .setURL("http://google.com")
                 .setMethod(Request.Method.POST)
                 .readFromURL()
                 .onListener(new WebRequest.VolleyListener() {
                     @Override
                     public void onRecieve(String data) {
                     }
            
                     @Override
                     public void onFail(VolleyError volleyError) {
                     }
                 });
            

            【讨论】:

            • @Piyush 使用此链接:computerworld.com/article/2702452/…
            • @Piyush 只需添加 getParams 方法即可。
            • 我认为仅仅添加 getParam 方法并不能解决整个目的。无论如何,我已经想出并在课堂上进行了所需的更改
            【解决方案8】:
            private void userregister() {
            
              final  ProgressDialog pDialog = new ProgressDialog(this);
                pDialog.setMessage("Loading...");
                pDialog.show();
            
                RequestQueue queue = Volley.newRequestQueue(SignupActivity.this);
                String url = "you";
                StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                pDialog.cancel();
            
                                try {
                                    JSONObject jsonObject= new JSONObject(response.toString());
                                    Log.e("status", ""+jsonObject.getString("status"));
                                    if(jsonObject.getString("status").equals("success"))
                                    {
                                        String studentid=jsonObject.getString("id");
                                        Intent intent=new Intent(SignupActivity.this, OTPVerificationActivity.class);
                                        startActivity(intent);
                                        finish();
                                    }
            
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                                Log.e("String ", ""+response);
            
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
            
                    }
                }) {
            
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String, String> params = new HashMap<>();
                        params.put("password", input_password.getText().toString());
                        params.put("cpassword", input_reEnterPassword.getText().toString());
                        params.put("email", input_email.getText().toString());
                        params.put("status", "1");
                        params.put("last_name", input_lastname.getText().toString());
                        params.put("phone", input_mobile.getText().toString());
                        params.put("standard", input_reStandard.getText().toString());
                        params.put("first_name", input_name.getText().toString());
                        params.put("refcode", input_reReferal.getText().toString());
                        params.put("created_at","");
                        params.put("update_at", "");
                        params.put("address", input_address.getText().toString());
                        return params;
                    }
                };
                // Add the request to the RequestQueue.
                queue.add(stringRequest);
            

            Get full code here

            【讨论】:

            • 永远不要只用代码回答问题。解释您的代码的作用以及为什么它比所有其他答案更好。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-05-24
            • 1970-01-01
            • 1970-01-01
            • 2021-10-13
            • 2021-07-17
            • 2018-12-10
            • 1970-01-01
            相关资源
            最近更新 更多