How to Build a ChatGPT Like App Android using OpenAI API?

Today, Chat GPT has gained widespread recognition as one of the prominent AI tools resembling a chatbot. This chatbot is adept at responding to various queries it receives. In this article, we will demonstrate how to develop a straightforward Android application similar to ChatGPT by incorporating the OpenAI API (ChatGPT). This application will enable users to ask questions and receive relevant answers.

We have already crafted a sample application, and we will examine its results before moving on to the creation of a new project within Android Studio.

Let’s break down the implementation into step-by-step instructions.

Step 1: Create a New Project in Android Studio
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin as the programming language.

Step 2: Add the below dependency in your build.gradle file
Below is the dependency for Volley which we will be using to get the data from API. For adding this dependency navigate to the app > Gradle Scripts > build.gradle(app) and add the below dependency in the dependencies section. We have used the Picasso dependency for image loading from the URL.

// below line is used for volley library
implementation ‘com.android.volley:volley:1.2.0’

After adding this dependency sync your project and now move toward the AndroidManifest.xml part.

Step 3: Adding permissions to the internet in the AndroidManifest.xml file
Navigate to the app > AndroidManifest.xml and add the below code to it.

<!--permissions for INTERNET-->
<uses-permission android:name="android.permission.INTERNET"/>

Step 4: Working with the activity_main.xml file
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/back_color"
    tools:context=".MainActivity"> 

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/idTILQuery"
        android:layout_alignParentTop="true"
        android:layout_margin="5dp"
        android:padding="5dp"> 

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"> 

            <!-- text view for displaying question-->
            <TextView
                android:id="@+id/idTVQuestion"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="30dp"
                android:padding="4dp"
                android:text="Question"
                android:textColor="@color/white"
                android:textSize="17sp" /> 

            <!-- text view for displaying response-->
            <TextView
                android:id="@+id/idTVResponse"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginTop="5dp"
                android:padding="4dp"
                android:text="Response"
                android:textColor="@color/white"
                android:textSize="15sp" /> 
        </LinearLayout> 

    </ScrollView> 
    <!-- text field for asking question-->
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/idTILQuery"
        style="@style/TextInputLayoutStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_margin="5dp"
        android:hint="Enter your query"
        android:padding="5dp"
        android:textColorHint="@color/white"
        app:hintTextColor="@color/white"> 

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/idEdtQuery"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/edt_back_color"
            android:drawableEnd="@drawable/ic_send"
            android:drawableTint="@color/white"
            android:ems="10"
            android:imeOptions="actionSend"
            android:importantForAutofill="no"
            android:inputType="textEmailAddress"
            android:textColor="@color/white"
            android:textColorHint="@color/white"
            android:textSize="14sp" /> 
    </com.google.android.material.textfield.TextInputLayout> 
</RelativeLayout>

Step 5: Generating bearer token for using the API.
Navigate to the below URL and simply sign up with your email and password. On this screen click on Create a new secret key to generate your new key. Once your key is generated that we have to use it as a token for making our API key.

Step 6: Working with MainActivity.kt file.
Navigate to app > java > your app’s package name > MainActivity.kt file and add the below code to it. Comments are added in the code to get to know it in detail.

import android.content.Context 
import android.os.Bundle 
import android.util.Log 
import android.view.inputmethod.EditorInfo 
import android.widget.TextView 
import android.widget.TextView.OnEditorActionListener 
import android.widget.Toast 
import androidx.appcompat.app.AppCompatActivity 
import com.android.volley.RequestQueue 
import com.android.volley.Response 
import com.android.volley.RetryPolicy 
import com.android.volley.VolleyError 
import com.android.volley.toolbox.JsonObjectRequest 
import com.android.volley.toolbox.Volley 
import com.google.android.material.textfield.TextInputEditText 
import org.json.JSONObject 

class MainActivity : AppCompatActivity() { 

    // creating variables on below line. 
    lateinit var responseTV: TextView 
    lateinit var questionTV: TextView 
    lateinit var queryEdt: TextInputEditText 

    var url = "https://api.openai.com/v1/completions"

    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
        // initializing variables on below line. 
        responseTV = findViewById(R.id.idTVResponse) 
        questionTV = findViewById(R.id.idTVQuestion) 
        queryEdt = findViewById(R.id.idEdtQuery) 

        // adding editor action listener for edit text on below line. 
        queryEdt.setOnEditorActionListener(OnEditorActionListener { v, actionId, event -> 
            if (actionId == EditorInfo.IME_ACTION_SEND) { 
                // setting response tv on below line. 
                responseTV.text = "Please wait.."
                // validating text 
                if (queryEdt.text.toString().length > 0) { 
                    // calling get response to get the response. 
                    getResponse(queryEdt.text.toString()) 
                } else { 
                    Toast.makeText(this, "Please enter your query..", Toast.LENGTH_SHORT).show() 
                } 
                return@OnEditorActionListener true
            } 
            false
        }) 
    } 

    private fun getResponse(query: String) { 
        // setting text on for question on below line. 
        questionTV.text = query 
        queryEdt.setText("") 
        // creating a queue for request queue. 
        val queue: RequestQueue = Volley.newRequestQueue(applicationContext) 
        // creating a json object on below line. 
        val jsonObject: JSONObject? = JSONObject() 
        // adding params to json object. 
        jsonObject?.put("model", "text-davinci-003") 
        jsonObject?.put("prompt", query) 
        jsonObject?.put("temperature", 0) 
        jsonObject?.put("max_tokens", 100) 
        jsonObject?.put("top_p", 1) 
        jsonObject?.put("frequency_penalty", 0.0) 
        jsonObject?.put("presence_penalty", 0.0) 

        // on below line making json object request. 
        val postRequest: JsonObjectRequest = 
            // on below line making json object request. 
            object : JsonObjectRequest(Method.POST, url, jsonObject, 
                Response.Listener { response -> 
                    // on below line getting response message and setting it to text view. 
                    val responseMsg: String = 
                        response.getJSONArray("choices").getJSONObject(0).getString("text") 
                    responseTV.text = responseMsg 
                }, 
                // adding on error listener 
                Response.ErrorListener { error -> 
                    Log.e("TAGAPI", "Error is : " + error.message + "\n" + error) 
                }) { 
                override fun getHeaders(): kotlin.collections.MutableMap<kotlin.String, kotlin.String> { 
                    val params: MutableMap<String, String> = HashMap() 
                    // adding headers on below line. 
                    params["Content-Type"] = "application/json"
                    params["Authorization"] = 
                        "Bearer Enter your token here"
                    return params; 
                } 
            } 

        // on below line adding retry policy for our request. 
        postRequest.setRetryPolicy(object : RetryPolicy { 
            override fun getCurrentTimeout(): Int { 
                return 50000
            } 

            override fun getCurrentRetryCount(): Int { 
                return 50000
            } 

            @Throws(VolleyError::class) 
            override fun retry(error: VolleyError) { 
            } 
        }) 
        // on below line adding our request to queue. 
        queue.add(postRequest) 
    } 
}

Thats all you need, if you have any question let me know.

RECOMMENDED ARTICLES

How to Fix WordPress Broken Admin Dashboard: A Step-by-Step Guide

How to Host a Blogspot Blog on Your Domain name: A Comprehensive Guide

How To Make Money And Maximize Your Earnings On X (Twitter): A Step-by-Step

How to create a Personal voice on your iphone running on iOS17

How to install Android 14 on your Smartphone

15 Midjourney Prompts you need to try plus results generated

By 4niso

Leave a Reply

Your email address will not be published. Required fields are marked *