十分钟教你搭建类似ChatGPT的安卓应用程序

2023-05-16

大家好,我是易安!

Chat GPT 是当今著名的人工智能工具,就像聊天机器人一样。Chat GPT会回答发送给它的所有查询。今天,我将通过集成 OpenAI API (ChatGPT)构建一个简单的类似 ChatGPT 的 android 应用程序,我们可以在其中提出任何问题并获得答案。

如何使 ChatGPT 像 Android 应用程序一样
如何使 ChatGPT 像 Android 应用程序一样

详细步骤

第 1 步:在 Android Studio 中创建一个新项目

要在 Android Studio 中创建新项目,以 Kotlin 作为编程语言为例。

第 2 步:在 build.gradle 文件中添加以下依赖项

下面是 Volley 的依赖项,我们将使用它从 API 获取数据。要添加此依赖项,请导航至 app > Gradle Scripts > build.gradle(app) 并在 dependencies 部分添加以下依赖项。我们使用 Picasso 依赖项从 URL 加载图像。

// 下一行用于 volley 库
实现 'com.android.volley:volley:1.2.0'

添加此依赖项后,同步您的项目,然后转到 AndroidManifest.xml 部分。

第三步:在AndroidManifest.xml文件中添加上网权限

导航到应用 > AndroidManifest.xml 并向其中添加以下代码。

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

第 4 步:使用 activity_main.xml 文件

导航到 app > res > layout > activity_main.xml 并将以下代码添加到该文件。下面是 activity_main.xml 文件的代码。

  • XML
<?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>

第 5 步:生成使用 API 的不记名令牌。

导航到以下URL (openai获取你的api key),只需使用您的电子邮件和密码注册即可。在此屏幕上单击创建新密钥以生成新密钥。生成您的密钥后,我们必须将其用作制作 API 密钥的令牌。

第 6 步:使用 MainActivity.kt 文件。

导航到 app > java > 你的应用程序包名称 > MainActivity.kt 文件并向其中添加以下代码。

这里选择的模型text-davinci-003,当然你可以选择其他3.5的模型

  • Kotlin
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)
  
  responseTV = findViewById(R.id.idTVResponse)
  questionTV = findViewById(R.id.idTVQuestion)
  queryEdt = findViewById(R.id.idEdtQuery)

  
  queryEdt.setOnEditorActionListener(OnEditorActionListener { v, actionId, event ->
   if (actionId == EditorInfo.IME_ACTION_SEND) {
    
    responseTV.text = "Please wait.."
    
    if (queryEdt.text.toString().length > 0) {
     
     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) {
  
  questionTV.text = query
  queryEdt.setText("")
  
  val queue: RequestQueue = Volley.newRequestQueue(applicationContext)
  
  val jsonObject: JSONObject? = JSONObject()
  
  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)

  
  val postRequest: JsonObjectRequest =
   
   object : JsonObjectRequest(Method.POST, url, jsonObject,
    Response.Listener { response ->
     
     val responseMsg: String =
      response.getJSONArray("choices").getJSONObject(0).getString("text")
     responseTV.text = responseMsg
    },
    
    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()
    
     params["Content-Type"] = "application/json"
     params["Authorization"] =
      "Bearer Enter your token here"
     return params;
    }
   }

  
  postRequest.setRetryPolicy(object : RetryPolicy {
   override fun getCurrentTimeout(): Int {
    return 50000
   }

   override fun getCurrentRetryCount(): Int {
    return 50000
   }

   @Throws(VolleyError::class)
   override fun retry(error: VolleyError) {
   }
  })
  
  queue.add(postRequest)
 }
}

最终运行结果:

alt

多年没开发安卓的我,也能在很短的时间不费吹飞之力搭建出来,你也赶紧去试试吧!之后我还会出一些更加详细的搭建教程,感谢阅读!

本文由 mdnice 多平台发布

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十分钟教你搭建类似ChatGPT的安卓应用程序 的相关文章

  • go 的时间操作

    未完 前言 本篇所有输入 xff0c 均用 p 代替 span class token comment 用 p 简写 span p span class token operator 61 span fmt span class token
  • Vm挂载虚拟硬盘(傻瓜式教程)

    Vm挂载虚拟硬盘 xff08 傻瓜式教程 xff09 第一步 xff1a 添加虚拟磁盘 打开vm xff0c 单机选择红帽的系统 编辑虚拟机设置 点击下面的添加 选择硬盘然后下一步 如果没有特殊的磁盘格式要求就默认推荐就好了 使用物理硬盘
  • 【学习笔记】在 Github Page 上托管基于 Vue 的项目

    环境 vscode 前言 本篇博文仅仅提供如何将 vue 项目部署在 github page 的基本操作 xff0c 至于项目的内容由读者自己决定 同时这是最基本的操作 xff0c 所以在复杂的项目部署中 xff0c 请根据具体情况 xff
  • 【学习笔记】查看你正在使用的 C++ 标准

    目录 查看 C 43 43 标准查看你的 gcc xff0c g 43 43 版本C 43 43 标准与 gcc 编译器的版本的对应关系C 43 43 标准与 Visual studio 的对应关系Visual studio 版本与 C 4
  • 【学习笔记】C++ 中的 virtual 关键字与虚函数

    目录 先决条件前言演示示例virtual 关键字的作用虚函数的规则参考与拓展深入拓展 先决条件 了解 C 43 43 中的多态这个概念 前言 virtual 关键字是面对对象中 xff0c 用于修饰类中的成员函数的关键字 被 virtual
  • 【经典回顾】HTTP 的请求与响应报文

    文章目录 前言请求报文请求行方法URL版本 首部行实体主体 响应报文状态行首部行实体主体 参考与拓展 前言 基于 HTTP1 1 xff0c 也就是目前最常用的 HTTP 协议版本 xff0c 涉及部分 HTTP 2 请求报文 让我们先来看
  • 【学习笔记】go 生成随机数

    目录 核心代码示例参考与拓展 核心 go 的标准库 xff08 math rand xff09 中已经为我们提供了产生伪随机数字的核心方法 xff0c 它们分别是用于产生种子的 rand Send value 和用于产生伪随机数的 rand
  • 【教程】油猴脚本开发入门教程

    目录 先决条件配置本地开发环境 可选 快速插入复杂的 HTML设置 CSS 样式发布与更新你的脚本常见标签简析 96 64 connect 96 96 64 grant 96 96 64 include 96 96 64 require 9
  • 【学习笔记】memcpy_s 函数与坑

    目录 函数原型函数描述参数描述返回值坑参考拓展 函数原型 errno t span class token function memcpy s span span class token punctuation span span clas
  • 【学习笔记】指向常量的指针和常量指针

    目录 指向常量的指针常量指针对比指向常量的指针与常量指针拓展参考 指向常量的指针 指向常量的指针 xff0c 即 pointer to const xff0c 即指针指向的是一个常量 xff0c 你应该把这个词 xff08 指向常量的指针
  • 【学习笔记】内存的连续分配管理方式

    目录 先决条件单一连续分配固定分区分配动态分区分配补充内部碎片和外部碎片基于顺序搜索的动态分区策略 xff08 算法 xff09 参考与扩展 先决条件 这里介绍的这些内存分配方式都是非常古老的内存分配方式 xff0c 基本已经不在现代操作系
  • 【教程】visual studio debug 技巧总结

    更新中 基础的调试技巧基本更新完毕 xff0c visual studio 提供了强大的调试功能 xff0c 许多东西需要大家动手体验 目录 环境调试器的基本使用更改执行流断点基本的断点操作跟踪点条件断点条件表达式命中次数过滤器 函数断点缩
  • Vm虚拟机创建raid5盘+热备盘

    Vm虚拟机创建raid5盘 43 热备盘 打开vm xff0c 然后创建四个新的虚拟硬盘 xff08 组建raid5盘最少需要3个硬盘 xff0c 我们留一个做热备盘 xff09 创建硬盘的步骤我在前面的博客有写 xff0c 这里就不掩饰了
  • 用VS2012导入工程时出现error MSB8020错误

    导入别人工程后进行编译出现如下错误 xff1a 解决方法 xff1a 在工程名后右击 属性 xff0c 将平台工具集改为自己安装版本的平台工具集如下图所示 xff1a 然后再次进行编辑就可以啦
  • 【学习笔记】windows 下的 shared memory(共享内存)原理与实践

    目录 先决条件共享内存介绍在 Win 下实现共享内存开发环境P1CreateFileMappingMapViewOfFileUnmapViewOfFileCloseHandle P2OpenFileMapping 示例补充File Mapp
  • 【学习笔记】同一个 solution 的不同 project 使用相同的头文件

    目录 环境前言在项目中引入文件添加额外的包含的目录 环境 OS xff1a win10IDE xff1a visual studio 2017 前言 有时候在开发中 xff0c 同一个 solution 下的不同 project 需要共享一
  • 【学习笔记】在 windows 下创建多线程 C++

    目录 先决条件传统的创建方式使用 CreateThread 函数实例 更安全的方式 beginthreadex实例 终止线程补充WaitForMultipleObjects 函数实例 参考 先决条件 最好了解以下内容 了解内核对象了解进程
  • 【教程】在 visual studio 共享和重用项目属性

    目录 环境前言同一项目中 xff0c 不同开发模式和平台的共享不同项目共享和重用项目属性进阶 参考 环境 os xff1a windows 10IDE xff1a visual studio 2015 前言 在 visual studio
  • 【学习笔记】C 语言中未开辟地址的指针作为函数参数传递的问题

    目录 问题描述有问题的做法正确的做法总结 问题描述 有时候我们希望传递一个空指针给一个函数 xff0c 然后该函数在堆上开辟动态内存 xff0c 然后该函数执行完后 xff0c 返回这个动态内存的地址 有问题的做法 先来看下面的一段程序 x
  • 【学习笔记】顺序容器的表格方式总结 C++

    目录 顺序容器及其特点顺序容器操作向顺序容器添加元素insertemplace 参考 更新中 顺序容器及其特点 名字访问元素插入 xff0c 删除元素vector xff08 可变大小数组 xff09 支持快速随机访问在尾部之外的位置插入或

随机推荐

  • 【学习笔记】C++ 下字符串与数字的拼接

    目录 环境sprintfto string 与 to wstring itoa 环境 OS xff1a win 10 IDE xff1a Visual Studio 2017 sprintf 描述 xff1a sprintf 是一种 C 风
  • 【教程】Windows 下 C++ 项目内存泄漏检查

    更新中 目录 环境Visual Stuido Profiling Tools打开方式使用查看原始类型报告查看 Managed 类型报告 参考与拓展 环境 windows 10IDE xff1a Visual Studio 2015 Visu
  • 【学习笔记】读取文件中的字符串与 fgets 的坑

    目录 前言环境问题模拟与复现正确的手法回顾 前言 今天写一个读取文件中字符串的函数 xff0c 理论上应该是很简单的 xff0c 但是写的时候发现输出的结果总是比文件中的内容少一个字符 xff0c 并且通过排查 xff0c 问题就是出在 f
  • [Atcoder Yahoo Contest 2019]D.Ears(动态规划)

    Score 600 600 6 0 0 points 题面 传送门 翻译有时间再补 题解 体验感极差 xff0c 考试的时候手残把1打成了2Debug了半个小时 害的F题都没做 先将题目转换一下 给你一条链 顺次连接着 n 43
  • 内网渗透-基础环境

    解决依赖 xff0c scope安装 打开要给cmd powershell 打开远程 Set ExecutionPolicy RemoteSigned scope CurrentUser 我试了好多装这东西还是得科学上网 xff0c 不然不
  • ubuntu(Linux)配置允许远程登陆

    安装ubuntu后默认不可以以root方式登录系统 xff0c 需要做以下配置 1 使用sudo i 命令可以让用户切换到root用户 xff0c guo用户是安装ubuntu时配置的用户 xff0c 因人而异 xff1b 2 配置root
  • Y9000P Ubuntu/Windows 双系统安装

    一 xff1a 配置介绍 Y9000P默认系统Win11 xff0c 系统盘500G xff0c 从盘2T xff0c 内存32G xff0c 显卡3060 二 xff1a Windows系统分盘 系统盘 xff08 磁盘1 xff09 建
  • axios的使用

    axios是基于Promise的HTTP库 xff0c 适用于各种前端框架 不同于普通http请求后的回调 xff0c Promise有更好的操作性 axios可以自动转换JSON数据 客户端支持防御XSRF攻击 axios的简单使用 安装
  • 怎么通过SQL取出数据库中JSON字段中的值

    我们的数据库中经常会遇到很多JSON的字段 xff0c 自己写的也好 xff0c 别人写的也好 一般我们取这个值的话 xff0c 会创建一个typeHandler来取值 那么如果我们想直接取到JSON里的值该怎么办呢 xff1f 其实很简单
  • GCC使用说明

    超详细的参考官方手册下载地址 https download csdn net download qq 34991787 16188604 GCC代表 GNU编译器合集 可编译C C 43 43 Objective C Objective C
  • 用顺序表实现的简易通讯录(第一版)

    实现一个通讯录 xff1b 通讯录可以用来存储1000个人的信息 xff0c 每个人的信息包括 xff1a 姓名 性别 年龄 电话 住址 提供方法 xff1a 1 添加联系人信息 2 删除指定联系人信息 3 查找指定联系人信息 4 修改指定
  • ubuntu没有rc.local文件

    当我们设置开机自启时候 xff0c 一般都在rc local文件里设置 xff0c 但是有的Ubuntu版本没有这个文件 了 xff0c 此时我们可以自己创建一个 1 创建一个rc local service文件 sudo vim etc
  • 阿里云快速网站搭建详解

    一 网站建站流程 主要步骤 要有一个域名 购买主机 要有数据库 一般购买主机赠送 解析域名 下载网站程序 演示用的WordPress 上传程序 安装程序 配置数据库 网站基本信息 管理员信息等 二 DNS服务器快速入门 DNS服务概述 DN
  • OpenStack ussuri 私有云平台搭建

    一 OpenStack简介 openstack是一个云操作系统 这个操作系统控制着数据中心中的计算 存储和网络资源 所有这些资源的管理都是通过API来来实现的 并且管理资源都有相应的认证机制 在openstack中有一个叫做dashboar
  • 重磅!阿里版本【ChatGPT】开放测评!

    前两天突然爆出惊人消息 xff1a 阿里版ChatGPT开放测评了 xff01 在本月初 xff0c 已经有诸多关于阿里巴巴即将推出类似ChatGPT产品的传闻 数日前 xff0c 首批曝光的天猫精灵 鸟鸟分鸟 脱口秀版GPT基于大型模型的
  • debian-dhcp实验(傻瓜教程)

    安装apt get install y isc dhcp server 我这里已经安装过了 我们尝试启动服务端 xff0c 发现失败了 xff0c 这里因为我们没有绑定网卡 看一下网卡 我这是ens33 为了防止配置dhcp影响我的外网 x
  • 如何免费使用ChatGPT 4?

    自从ChatGPT发布以来 xff0c 它就取得了巨大的成功 无论是常春藤法学考试还是商学院作业 xff0c ChatGPT都被用于各种试验 统计数据显示 xff0c ChatGPT每月吸引约9600万用户 随着ChatGPT的巨大成功 x
  • 利用ChatGPT,一分钟制作思维导图

    大家好 xff0c 我是易安 xff01 今天我来教你如何使用ChatGPT xff0c 一分钟制作出一份思维导图 大纲选题 想到一个课题 xff0c 然后人工梳理出内容大纲 xff0c 是个挺费精力的事情 但利用ChatGPT来做这件事
  • 谈谈几种分布式锁实现

    大家好 xff0c 我是易安 xff01 今天我们呢谈一谈常见的分布式锁的几种实现方式 什么是分布式锁 在JVM中 xff0c 在多线程并发的情况下 xff0c 我们可以使用同步锁或Lock锁 xff0c 保证在同一时间内 xff0c 只能
  • 十分钟教你搭建类似ChatGPT的安卓应用程序

    大家好 xff0c 我是易安 xff01 Chat GPT 是当今著名的人工智能工具 xff0c 就像聊天机器人一样 Chat GPT会回答发送给它的所有查询 今天 xff0c 我将通过集成 OpenAI API ChatGPT 构建一个简