-
Notifications
You must be signed in to change notification settings - Fork 6.3k
Networking with the Volley Library
Volley is a library that makes networking for Android apps easier and most importantly, faster. Volley Library was announced by Ficus Kirkpatrick at Google I/O '13! It was first used by the Play Store team in Play Store Application and then they released it as an Open Source Library.
- Volley can pretty much do everything with that has to do with Networking in Android.
- Volley automatically schedules all network requests such as fetching responses for image from web.
- Volley provides transparent disk and memory caching.
- Volley provides powerful cancellation request API for canceling a single request or you can set blocks of requests to cancel.
- Volley provides powerful customization abilities.
- Volley provides debugging and tracing tools.
Adding Volley to our app/build.gradle
file:
dependencies {
compile 'com.android.volley:volley:1.0.0'
}
And add the internet permission in AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.simplenetworking"
android:versionCode="1"
android:versionName="1.0" >
<!-- Add permissions here -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
Volley has two classes that you will have to deal with:
-
RequestQueue
- Requests are queued up here to be executed -
Request
(and any extension of it) - Constructing an network request
A Request object comes in three major types:
- JsonObjectRequest — To send and receive JSON Object from the server
- JsonArrayRequest — To receive JSON Array from the server
- ImageRequest - To receive an image from the server
- StringRequest — To retrieve response body as String (ideally if you intend to parse the response by yourself)
All requests in Volley are placed in a queue first and then processed, here is how you will be creating a request queue:
public MainActivity extends Activity {
private RequestQueue mRequestQueue;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_screen_layout);
// ...
mRequestQueue = Volley.newRequestQueue(this);
}
}
See this guide for creating a singleton to use for sending requests.
After this step you are ready to create your Request
objects which represents a desired request to be executed. Then we add that request onto the queue.
public class MainActivity extends Activity {
private RequestQueue mRequestQueue;
// ...
private void fetchJsonResponse() {
// Pass second argument as "null" for GET requests
JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, "http://ip.jsontest.com/", null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String result = "Your IP Address is " + response.getString("ip");
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
}
});
/* Add your Requests to the RequestQueue to execute */
mRequestQueue.add(req);
}
}
And that will execute the request to the server and respond back with the result as specified in the Response.Listener
callback. For a more detailed look at Volley, check out this volley tutorial.
You can tag a request with:
StringRequest stringRequest = ...;
RequestQueue mRequestQueue = ...;
// Set the tag on the request.
stringRequest.setTag(TAG);
// Add the request to the RequestQueue.
mRequestQueue.add(stringRequest);
You can now cancel all requests with this tag using the cancelAll
on the request queue:
@Override
protected void onStop() {
super.onStop();
if (mRequestQueue != null) {
mRequestQueue.cancelAll(TAG);
}
}
Created by CodePath with much help from the community. Contributed content licensed under cc-wiki with attribution required. You are free to remix and reuse, as long as you attribute and use a similar license.
Finding these guides helpful?
We need help from the broader community to improve these guides, add new topics and keep the topics up-to-date. See our contribution guidelines here and our topic issues list for great ways to help out.
Check these same guides through our standalone viewer for a better browsing experience and an improved search. Follow us on twitter @codepath for access to more useful Android development resources.