您如何使用 Android Volley API?

Posted

技术标签:

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

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

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

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

Source code

【问题讨论】:

转到此链接 java.dzone.com/articles/android-%E2%80%93-volley-library 由 Stack Overflow 用户 Paresh Mayani 编写。 看看这个:afzaln.com/volley/overview-summary.html 我在这里写过 -> goo.gl/nl2DfN 【参考方案1】:

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

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

6 examples by Ognyan Bankov:

简单的请求 JSON 请求 Gson 请求 图片加载 使用较新的外部 HttpClient (4.2.3) 使用自签名 SSL 证书。

one good simple example 帕雷什·玛雅尼

other example by HARDIK TRIVEDI

)Android working with Volley Library Ravi Tamada

希望对你有帮助

【讨论】:

有趣的图书馆和很棒的链接!!谢谢@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

【讨论】:

永远不要只用代码回答问题。解释您的代码的作用以及为什么它比所有其他答案更好。

以上是关于您如何使用 Android Volley API?的主要内容,如果未能解决你的问题,请参考以下文章

Android实战--英文词典(API+GSON+Volley)

Android实战--英文词典(API+GSON+Volley)

如何使用 volley 将 Body Data 发送到 GET Method Request android?

如何通过 Volley Android 发布多个大图像文件

如何处理 Android API 23 中的 volley(删除相关的 apache http 包)?

Android (java) 基于相同的 Volley API 响应 (JSON) 创建动态 UI