Android Http Get and Post Example with OkHttp
In this example, we are going to learn how to execute simple Http Get and Post requests from our Android Application. We are going to make use of the OkHTTP 3.0 library, where OkHTTP is an Open Source project designed to be an efficient HTTP client. The usage of this library is very simple and if you are using Gradle as build system you can simply add a dependency to your project
For this example we are using the following tools in a Windows 64-bit or an OS X platform:
- JDK 1.7
- Android Studio 2.1.2
- Android SDK 5.1
Let’s take a closer look:
1. Create a New Android Studio Project
You may skip project creation and jump directly to the beginning of the example below.
Open Android Studio and choose “Start a new Android Studio Project” in the welcome screen.
Specify the name of the application, the project and the package.
In the next window, select the form factors your app will run on.
In the next window you should choose to “Add an activity to Mobile”. In our example, we will choose to create a project with no activity, so choose: “Add no activity”.
Now press finish, and our project has just been created!
2. Create the layout of the project
Add a new xml file inside /res/layout
folder, with name main.xml
. We should have /layout/main.xml
file and paste the code below.
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:layout_width="250dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginTop="40dp" android:background="#454545" android:onClick="makeGetRequest"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Make Get Request" android:textColor="#ffffff" /> </FrameLayout> <FrameLayout android:layout_width="250dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginTop="20dp" android:background="#454545" android:onClick="makePostRequest"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Make Post Request" android:textColor="#ffffff" /> </FrameLayout> </LinearLayout>
3. Creating the source code of the AndroidHttpPostGetActivity Activity
Add a new Java class inside src/com.javacodegeeks.com.javacodegeeks.androidhttppostgetexample/
so that we are going to have the src/com.javacodegeeks.com.javacodegeeks.androidhttppostgetexample/AndroidHttpPostGetActivity.java
file and paste the code below.
AndroidHttpPostGetActivity.java
package com.javacodegeeks.androidhttppostgetexample; import java.io.IOException; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import com.javacodegeeks.R; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class AndroidHttpPostGetActivity extends Activity { OkHttpClient client; MediaType JSON; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); client = new OkHttpClient(); JSON = MediaType.parse("application/json; charset=utf-8"); } public void makeGetRequest(View v) throws IOException { GetTask task = new GetTask(); task.execute(); } public class GetTask extends AsyncTask { private Exception exception; protected String doInBackground(String... urls) { try { String getResponse = get("https://publicobject.com/helloworld.txt"); return getResponse; } catch (Exception e) { this.exception = e; return null; } } protected void onPostExecute(String getResponse) { System.out.println(getResponse); } public String get(String url) throws IOException { Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } } public void makePostRequest(View v) throws IOException { PostTask task = new PostTask(); task.execute(); } public class PostTask extends AsyncTask { private Exception exception; protected String doInBackground(String... urls) { try { String getResponse = post("http://www.roundsapp.com/post", bowlingJson("Me", "You")); return getResponse; } catch (Exception e) { this.exception = e; return null; } } protected void onPostExecute(String getResponse) { System.out.println(getResponse); } private String post(String url, String json) throws IOException { RequestBody body = RequestBody.create(JSON, json); Request request = new Request.Builder() .url(url) .post(body) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } } public String bowlingJson(String player1, String player2) { return "{'winCondition':'HIGH_SCORE'," + "'name':'Bowling'," + "'round':4," + "'lastSaved':1367702411696," + "'dateStarted':1367702378785," + "'players':[" + "{'name':'" + player1 + "','history':[10,8,6,7,8],'color':-13388315,'total':39}," + "{'name':'" + player2 + "','history':[6,10,5,10,10],'color':-48060,'total':41}" + "]}"; } }
4. AndroidManifest.xml
The AndroidManifest.xml of our project is simple and contains the essential INTERNET permission:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.javacodegeeks.androidhttppostgetexample"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".AndroidHttpPostGetActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest >
5. build.gradle
The build.gradle of our project is simple and contains the OkHttp3 import.
build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "com.javacodegeeks" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.squareup.okhttp3:okhttp:3.3.1' }
6. Build, compile and run
When we build, compile and run our project, the main AndroidMultitouchExample should look like this:
7. Download the Android Studio Project
This was an example of Android Http Get and Post Example with OkHttp.
You can download the full source code of this example here: AndroidHTTPPostGetExample.zip
If you want to learn more about OkHttp you can visit the GitHub library here.