Android APP初始的操作, 调用后台API
操作环境
步骤
- 没有模拟器的需要先建立模拟器
- 没有代理的先把gradle设置全局HTTP代理
- 建立kotlin项目, 选择Empty Activity
- 新建一个Activity, 在上面放几个按钮和文本框, 注意设置android:id和android:onClick
- 添加以下引用,Sync一下
1
2
3
4
5
6
|
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
//okhttp提供的请求日志拦截器
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
- AndroidManifest.xml 中修改一下 exported 属性, 一个APP必需要有一个默认的
1
|
<activity android:name=".MainActivity" android:exported="true"></activity>
|
- 同样的 AndroidManifest.xml, 增加两条权限声明, 否则无法访问网络. 需要注意权限修改后需要卸载模拟器里的APP才可以, 可以到设置的APP列表里进行卸载, 调试的时候在外面看不到
1
2
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
|
- res下建立xml目录, 并在其下建立 network_security_config.xml文件, 内容如下
1
2
3
4
|
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
|
- AndroidManifest.xml 加入 networkSecurityConfig
1
2
3
4
5
6
7
8
|
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme">
|
- 建立api接口, Observable需要引用
import io.reactivex.Observable
1
2
3
4
5
6
7
|
interface ApiService {
@GET("/testGet")
fun getData(@Query("a") a:String):Observable<ResponseBody>
@POST("/testPOST")
fun postData(@Query("a") a:String,@Body myBody:MyBody) :Observable<MyBody>
}
|
- 建立数据类
1
2
3
4
|
data class MyBody (
val name:String,
val age:Int
)
|
- 创建自定义的httpclient
1
2
3
4
|
var myClient = okhttp3.OkHttpClient.Builder()
.connectTimeout(10,TimeUnit.SECONDS)
.writeTimeout(5,TimeUnit.SECONDS)
.readTimeout(5,TimeUnit.SECONDS).build()
|
- 可以调用了
1
2
3
4
5
6
7
8
9
10
11
12
13
|
var retrofit = Retrofit.Builder().baseUrl("http://192.168.3.24:8585").client(myClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
.postData("a", MyBody("ss",19))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
resultTextView.setText(it.toString())
}) {
println(it)
}
|
- 最后需要把 Retrofit2 封装一下方便调用
PS: kotlin的语法还不太清楚, 瞎写的