Android向前端发送数据
一般需要交互的数据无非就是文件和字符串(可以替代很多东西),文件又可以变为字符串流进行传输。本文将使用okhttp包从Android端向后端发送数据和接收返回数据。
注意:个人电脑测试若无https协议的域名或ip地址,请在Android的AndroidManifest.xml文件中声明使用明文传输,即不加密而使用http协议。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:usesCleartextTraffic="true"//此处默认选项为false,不启用明文传输,改为true即可
android:theme="@style/AppTheme">
</application>
数据发送,Android端向客户端发送消息如果为get直接在url中添加参数即可,下面主要介绍post,用字符串作为post参数,文件将经过base64编码为字符串传输,字符串类型数据可采用json传输也可以直接用字符串。注意:okhttp包需额外下载,包含okhttp和okio两个包且版本存在不适配问题,需要对应,这里采用okhttp3.12, okio1.14。如果使用grade(一般Android都是这个),可直接在build.grade中使用implementation group: 'com.squareup.okio', name: 'okio', version: '1.14.0'
导入,建议下载对应包。
注意:数据发送操作(向网络申请数据)为耗时操作,不可在主线程中运行,另外不建议直接在oncreate等视图创建方法中调用,可以作为按钮点击事件调用。另外收sdk限制同时会限制jdk版本,这里使用的base64编码是Android自带的,与稍后后端解析时的不同。因为jdk版本原因及编码规范,存在不同格式的base64编码,Androidsdk26以上可采用java自带的base64编码工具。
new Thread()
{
//重写线程run方法
@Override
public void run()
{
//定义okhttp对象
OkHttpClient okHttpClient = new OkHttpClient();
try
{
//如果传输文件
FileInputStream inputStream = new FileInputStream(new File(getDataDir() + "/x1.png"));
//文件读取为bytes
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
//将bytes使用base64编码
String a1 = Base64