okhttp异步get和post请求,实现读取获取、增加http文件数据

Okhttp类,封装方法

package com.example.httptest;import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;import androidx.annotation.NonNull;import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;public class Okhttp {private static final String TAG = "Okhttp";private Context context;//上下文环境private static final String DB_NAME = "Account.db";//数据库名private static final int DB_VERSION = 1;//数据库版本号private static final String TABLE_NAME = "User";//表名private Context mContext;// 列名称private static final String COLUMN_ID = "id";private static final String COLUMN_NAME = "name";private static final String COLUMN_PASSWORD = "password";private static final String COLUMN_MONEY = "money";private DBHelper mDBHelper;private SQLiteDatabase mSQLiteDatabase;private final OkHttpClient okHttpClient = new OkHttpClient();Account mAccount = new Account();//异步get请求 调用enqueue()方法,传入回调函数 查所有用户数据public void doGetAsync() {Request request = new Request.Builder().url("http://192.168.1.3:3000/Account/AddAccount").build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {Log.e(TAG, "失败");}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {String string = response.body().string();/*Map<String, String> map = new HashMap<String, String>();map.put("username","username");map.put("password","password");map.put("money","money");map.put("id","id");JSONArray jsonArray = new JSONArray();jsonArray.add(map);JSONObject jsonObject = JSONObject.fromObject(map);*/// JSONArray jsonArray = new JSONArray(string);// JSONArray object = new JsonParse().parse(string).getAsJsonArray();JsonArray jsonArray = new JsonParser().parse(string).getAsJsonArray();//  Gson gson = new Gson();
//Account account = new Account(1,"xiaoming","123",0.0);//String j = gson.toJson(string);//   Account acc = gson.fromJson(string, Account.class);
//Log.e(TAG, String.valueOf(acc));//int v1 = acc.getId();//Log.e(TAG, String.valueOf(v1));}});}public void addAccountSQlite(JSONObject jsonObject) throws JSONException {SQLiteDatabase db = mDBHelper.getWritableDatabase();ContentValues contentValues = new ContentValues();contentValues.put("username", "1");//SQLiteDatabase db = helper.getReadableDatabase();// String sql = "insert into User values(" + id + ',' + name + ',' + pwd + ',' + 0.0 + ")";Log.e(TAG, jsonObject.getString("key1"));}public void doGetAccount() {Request request = new Request.Builder().url("http://192.168.1.3:3000/Account/GetAccount?username=XiaoMing").build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {Log.e(TAG, "失败");}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {String string = response.body().string();Log.e(TAG, "成功 " + string);}});}//异步post请求  调用enqueue()方法,传入回调函数  新增用户public void doPostAsync() {RequestBody body = new FormBody.Builder()// FormBody formBody = new FormBody.Builder().add("username", "xiao9").add("password", "9").add("money", "9").add("id", "23").build();Request request = new Request.Builder().url("http://192.168.1.3:3000/Account/AddAccount").post(body).build();okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {Log.e(TAG, "失败");}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {if (response.isSuccessful()) {Log.e(TAG, "成功");Log.e(TAG, "doPostAsync: " + response.body().string());}}});}
}

activity类

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"tools:context=".MainActivity"android:orientation="vertical"android:gravity="center"android:layout_margin="10dp"><Buttonandroid:id="@+id/GetAllAccountGetbutton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="GetAllAccount Get接口"android:textSize="25dp" /><Buttonandroid:id="@+id/GetAccountGetbutton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="GetAccount Get接口"android:textSize="25dp"android:layout_marginTop="30dp"/><Buttonandroid:id="@+id/AddAccountPostbutton"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="AddAccount Post接口"android:textSize="25dp"android:layout_marginTop="30dp"/></LinearLayout>

MainActivity

package com.example.httptest;import static android.content.ContentValues.TAG;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;import android.accounts.Account;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;import org.json.JSONArray;import java.io.IOException;
import java.util.ArrayList;public class MainActivity extends AppCompatActivity {ArrayList<Account> mAccounts = new ArrayList<>();private Button mGetAllAccountGetbutton;private Button mGetAccountGetbutton;private Button mAddAccountPostbutton;private Okhttp mOkhttp = new Okhttp();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mGetAllAccountGetbutton = findViewById(R.id.GetAllAccountGetbutton);mGetAllAccountGetbutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {mOkhttp.doGetAsync();}});mAddAccountPostbutton = findViewById(R.id.AddAccountPostbutton);mAddAccountPostbutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {mOkhttp.doPostAsync();}});mGetAccountGetbutton = findViewById(R.id.GetAccountGetbutton);mGetAccountGetbutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {mOkhttp.doGetAccount();}});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的图片 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时&#xff0c;这会导致minor …

【Rust 基础篇】Rust Never类型:表示不会返回的类型

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。在Rust中&#xff0c;Never类型是一种特殊的类型&#xff0c;它表示一个函数永远不会返回。Never类型在Rust中有着重要的应用场…

Rust dyn - 动态分发 trait 对象

dyn - 动态分发 trait 对象 dyn是关键字&#xff0c;用于指示一个类型是动态分发&#xff08;dynamic dispatch&#xff09;&#xff0c;也就是说&#xff0c;它是通过trait object实现的。这意味着这个类型在编译期间不确定&#xff0c;只有在运行时才能确定。 practice tr…

《Spring Boot源码解读与原理分析》书籍推荐

Spring Boot 1.0.0 早在2014年就已经发布&#xff0c;只不过到了提倡“降本增效”的今天&#xff0c;Spring Boot才引起了越来越多企业的关注。Spring Boot是目前Java EE开发中颇受欢迎的框架之一。依托于底层Spring Framework的基础支撑&#xff0c;以及完善强大的特性设计&am…

设计模式之中介者模式

中介者模式 用一个中介对象来封装一系列的对象交互。中介者使得各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变他们之间的交互。 电脑主板的功能就类似于一个中介者 经典中介者模式UML 例子 经典的中介者模式 package com.tao.Ya…

Linux用户权限信息、chmod以及chown命令

权限修改 权限信息chmod命令chown命令 权限信息 在Linux系统中&#xff0c;每个文件和目录都包含了权限信息&#xff0c;用于控制对其的访问权限。 文件权限&#xff1a;Linux系统中的文件权限由三组权限表示&#xff0c;分别是所有者权限、组权限和其他用户权限。 所有者权…

Excel快捷键F1-F9详解:掌握实用快捷操作,提升工作效率

Excel是广泛应用于办公场景的优质电子表格软件&#xff0c;然而&#xff0c;许多人只是使用鼠标点击菜单和工具栏来完成操作&#xff0c;而忽略了快捷键的威力。在本文中&#xff0c;我们将详解Excel中的F1-F9快捷键&#xff0c;帮助您掌握实用的快捷操作&#xff0c;提升工作效…

leetcode(力扣)剑指 Offer 16. 数值的整数次方 (快速幂)

文章目录 题目描述思路分析完整代码 题目描述 实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数&#xff08;即&#xff0c;xn&#xff09;。不得使用库函数&#xff0c;同时不需要考虑大数问题。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;10…

通向架构师的道路之Apache整合Tomcat

一、先从J2EE工程的通用架构说起 这是一个通用的Web即B/S工程的架构&#xff0c;它由&#xff1a; Web Server App Server DB Server 三大部分组成&#xff0c;其中&#xff1a; Web Server 置于企业防火墙外&#xff0c;这个防火墙&#xff0c;大家可以认为是…

c语言(函数)

目录 何为函数 库函数 自定义函数 二分查找数组下标 链式访问 函数的声明 函数定义 递归 正向打印数字 打印字符个数 使用临时变量 递归(不使用临时变量) n的阶乘 一般形式 递归 斐波那契数 递归 正常做法 何为函数 在计算机科学中&#xff0c;子程序是一个…

150. 逆波兰表达式求值

150. 逆波兰表达式求值 题目-中等难度示例1. 字典存储function2. if-else 题目-中等难度 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 ‘’、‘-’…

华为数通HCIA-实验环境ensp简介

ensp 路由器&#xff1a;AR系列、NE系列&#xff1b; 模拟器中使用AR2220&#xff1b; 交换机&#xff1a;S系列、CE系列&#xff1b; 模拟器中使用S5700&#xff1b; 线缆&#xff1a;copper——以太网链路&#xff1b; serial——串行链路&#xff0c;在模拟器中用于模…

单片机外部晶振故障后自动切换内部晶振——以STM32为例

单片机外部晶振故障后自动切换内部晶振——以STM32为例 作者日期版本说明Dog Tao2023.08.02V1.0发布初始版本 文章目录 单片机外部晶振故障后自动切换内部晶振——以STM32为例背景外部晶振与内部振荡器STM32F103时钟系统STM32F407时钟系统 代码实现系统时钟设置流程时钟源检测…

spring AOP学习

概念 面向切面编程横向扩展动态代理 相关术语 动态代理 spring在运行期&#xff0c;生成动态代理对象&#xff0c;不需要特殊的编译器 Spring AOP的底层就是通过JDK动态代理或者CGLIb动态代理技术为目标Bean执行横向织入 目标对象实现了接口&#xff0c;spring使用JDK的ja…

Redis 集群 (cluster)

是什么 官网&#xff1a;Redis cluster specification | Redis 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集的一部分&#xff0c;这就是Redis的集群&#xff0c;其作…

【机器学习】西瓜书习题3.5Python编程实现线性判别分析,并给出西瓜数据集 3.0α上的结果

参考代码 结合自己的理解&#xff0c;添加注释。 代码 导入相关的库 import numpy as np import pandas as pd import matplotlib from matplotlib import pyplot as plt导入数据&#xff0c;进行数据处理和特征工程 得到数据集 D { ( x i , y i ) } i 1 m , y i ∈ { 0 ,…

VR 变电站事故追忆反演——正泰电力携手图扑

VR(Virtual Reality&#xff0c;虚拟现实)技术作为近年来快速发展的一项新技术&#xff0c;具有广泛的应用前景&#xff0c;支持融合人工智能、机器学习、大数据等技术&#xff0c;实现更加智能化、个性化的应用。在电力能源领域&#xff0c;VR 技术在高性能计算机和专有设备支…

【机器学习】处理样本不平衡的问题

文章目录 样本不均衡的概念及影响样本不均衡的解决方法样本层面欠采样 &#xff08;undersampling&#xff09;过采样数据增强 损失函数层面模型层面采样集成学习 决策及评估指标 样本不均衡的概念及影响 机器学习中&#xff0c;样本不均衡问题经常遇到&#xff0c;比如在金融…

JVM垃圾收集机制详解与性能调优(详细)

JVM垃圾收集机制详解与性能调优 概述 Java虚拟机中的垃圾收集主要是针对堆内存进行的,其目的是识别出已死对象,并回收其占用的内存。正确理解和使用垃圾收集机制,对于提升Java程序性能非常重要。 常见的垃圾收集器包括串行收集器、吞吐量收集器和并发收集器。下一节我先介绍…

uniapp运行项目到iOS基座

2022年9月&#xff0c;因收到苹果公司警告&#xff0c;目前开发者已无法在iOS真机设备使用未签名的标准基座&#xff0c;所以现在要运行到 IOS &#xff0c;也需要进行签名。 Windows系统&#xff0c;HBuilderX 3.6.20以下版本&#xff0c;无法像MacOSX那样对标准基座进行签名…