In Android, it is very useful to make network requests to mostly interact with an API. There are many ways to achieve that, but the simplest way - that is also recommended by Google - is the library volley.
Get Started
At first, you have to add the volley library to your build.gradle
dependencies {
...
compile 'com.android.volley:volley:1.0.0'
}
Next you have to add the Internet permission to your AndroidManifest.xml, if you haven't already.
<uses-permission android:name="android.permission.INTERNET" />
StringRequest
For a normal GET request were starting with a standard StringRequest that you have to add to volley's Volley.newRequestQueue.
String url = "http://httpbin.org/get";
//request a string response
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//now handle the response
Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//handle the error
Toast.makeText(MainActivity.this, "An error occurred", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
});
// Add the request to the queue
Volley.newRequestQueue(this).add(stringRequest);
Now that was just the simplest implementation. You can do also other requests:
StringRequestJSONArrayRequestJSONObjectRequestImageRequest
JsonRequest
When you want to make a POST-request you usually want to pass some data, too. For that, we are using one of the JSONRequests.
String url = "http://httpbin.org/post";
//create post data as JSONObject - if your are using JSONArrayRequest use obviously an JSONArray :)
JSONObject jsonBody = new JSONObject("{\"message\": \"Hello\"}");
//request a json object response
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, jsonBody, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//now handle the response
Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//handle the error
Toast.makeText(MainActivity.this, "An error occurred", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
});
// Add the request to the queue
Volley.newRequestQueue(this).add(jsonRequest);
When you don't want to pass data on the request, you can just replace jsonBody with null:
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, null, new Response.Listener<JSONObject>() {
...
}
ImageRequest
Sometimes you may want to load images from the web and display it in an ImageView or process it. For that, you could use volley's ImageRequest
String url = "http://www.underconsideration.com/brandnew/archives/google_2015_logo_detail.png";
//you could use an image view to display the resulting image
imageView = (ImageView) findViewById(R.id.image);
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
//now handle the response
imageView.setImageBitmap(response);
}
}, 0, //maxWidth if 0 it's going to be ignored
0, //maxHeight if 0 it's going to be ignored
ImageView.ScaleType.FIT_XY, //ScaleType
Bitmap.Config.ARGB_8888, //just leave it. Fits for the most
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//handle the error
Toast.makeText(MainActivity.this, "An error occurred", Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
});
// Add the request to the queue
Volley.newRequestQueue(this).add(imageRequest);
But in fact, I would recommend using an image loading library like glide or picasso. They are a lot easier to implement and to use and they do have other helpful image related features as well.
Reupload from CodeSnipps