您如何使用 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?