如何使用 Android Volley API?

我正在考虑在我的下一个项目(Google IO 关于 Volley 的演示)中实现 Android Volley 库。

但是,我还没有找到任何适用于该库的 API。

如何上传文件,执行 POST/GET 请求,并使用 Volley 添加一个 Gson 解析器作为 JSON解析器?

源代码

68413 次浏览

不幸的是,到目前为止还没有像 JavaDocs 这样的 Volley 库的文档。只有回购 github 和几个教程在互联网上。所以唯一好的医生是 源代码:)。当我玩截击的时候,我读了这个 教程

关于 post/get 你可以阅读这篇文章: Volley-POST/GET 参数 < p > < p > 希望这对你有帮助

只需将 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);

如需更多帮助,请参考 如何使用齐射

这是使用 Volley 发出 POST 请求的示例。StringRequest 用于获取 String 形式的响应。
假设您的剩余 API 返回一个 JSON。来自 API 的 JSON 响应在这里作为 String 接收,您可以再次将其转换为 JSON 并进一步处理它。在代码中添加注释。

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);
}
}

使用此类。它为您提供了连接到数据库的简单方法。

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) {
}
});

很简单

 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);
}

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

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

并且不要忘记将 Internet 权限添加到您的 Manifest 文件中。

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);

这里有完整代码