Android

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

Tip
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.

“Welcome to Android Studio” screen. Choose “Start a new Android Studio Project”.
“Welcome to Android Studio” screen. Choose “Start a new Android Studio Project”.

Specify the name of the application, the project and the package.

“Configure your new project” screen. Add your application name and the projects package name.
“Configure your new project” screen. Add your application name and the projects package name.

In the next window, select the form factors your app will run on.

“Target Android Devices” screen.
“Target Android Devices” screen.

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”.

“Add an activity to Mobile”. Choose: “Add no activity”.
“Add an activity to Mobile”. 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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?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

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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:

This is how our application looks.
This is how our application looks.

7. Download the Android Studio Project

This was an example of Android Http Get and Post Example with OkHttp.

Download
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.

Chryssa Aliferi

Chryssa is a Computer Science graduate from Athens University of Economic and Business. During her studies, Chryssa carried out a great variety of projects ranging from networking to software engineering. She is very keen on front end development especially on mobile technologies and web applications. She has worked as a junior Software Engineer in the telecommunications area and currently works as an Android Developer.
Subscribe
Notify of
guest


This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button