开发安卓手机客户端,常常会需要上传文件到服务器,比如:你手机里的照片。
使用okhttp会是一个很好的选择。它使用很简单,而且运行效率也很高。
首先,在app/构建。gradle的依赖增加“com.squareup.okhttp3: okhttp: 3.8.1”可实现以参照如下代码
应用插件:“com.android.application” 应用插件:“kotlin-android” 应用插件:“kotlin-android-extensions” android { compileSdkVersion 26 defaultConfig { applicationId“com.cofox.mykt.myweather” minSdkVersion 19 targetSdkVersion 26 versionCode 1 versionName“1.0” testInstrumentationRunner“android.support.test.runner.AndroidJUnitRunner” } buildTypes { 释放{ minifyEnabled假 proguardFiles getDefaultProguardFile (“proguard-android.txt”)、“proguard-rules.pro” } } sourceSets { 主要{ res.srcDirs=( ' src/main/res/layout/menufunction ', “src/main/res” ] } } } 依赖关系{ 实现fileTree (dir:“库”,包括:[' * . jar ']) 实现“org.jetbrains.kotlin: kotlin-stdlib-jre7: kotlin_version美元” 实现“com.android.support: appcompat-v7:26.1.0”实现“com.android.support.constraint: constraint-layout: 1.0.2” testImplementation junit: junit: 4.12“androidTestImplementation”com.android.support.test:跑步者:1.0.1 androidTestImplementation com.android.support.test.espresso: espresso-core: 3.0.1的 实现“org.jetbrains.anko: anko-sdk19:0.10.3” 实现“org.jetbrains.anko: anko-support-v4:0.10.3” 实现“org.jetbrains.anko: anko-appcompat-v7:0.10.3” 实现“com.google.code.gson: gson: 2.7” 实现“com.android.support:百分比:26.1.0” 实现“com.squareup.okhttp3: okhttp: 3.8.1” }
在界面上添加一个按钮,以及一个可滚动显示返回值的文字组件。
& lt;按钮 android: id=癅 + id/btnOkHttpUploadFilePost” android: layout_width=" wrap_content " android: layout_height=" wrap_content " android: layout_weight=" 1 " android:文本=" OkHttp上传文件(POST)” android: textAllCaps=" false "/比; & lt;滚动视图 android: layout_width=" match_parent " android: layout_height=皐rap_content”比; & lt; TextView android: id=癅 + id/ttviewResponse” android: layout_width=" match_parent " android: layout_height=" match_parent "/比; & lt;/ScrollView>
因为只是基本功能实现,所以采用发送手机上指定的一个文件就达成目的。
在代码编辑区,首先添加一个默认的服务器地址。
//设置访问服务端IP var serverIp=" 192.168.1.105 "
在onCreate方法内添加按钮操作代码
//发布方式上传文件(sd卡跟路径image.png文件) btnOkHttpUploadFilePost。setOnClickListener { 线程{ 尝试{ val url=" http://" + serverIp +“/上传” val=文件(“/sdcard/image.png”) val fileBody=RequestBody.create (MediaType.parse(“应用程序/八进制”),文件) val requestBody=MultipartBody.Builder () .setType (MultipartBody.FORM) .addFormDataPart(“还是”、“形象。png”, fileBody) .build () val请求=Request.Builder () .url (url) . post (requestBody) .build () val httpBuilder=OkHttpClient.Builder () val okHttpClient=httpBuilder java.util.concurrent.TimeUnit.SECONDS .connectTimeout (10) java.util.concurrent.TimeUnit.SECONDS .writeTimeout(15日) .build () val响应=okHttpClient.newCall(请求). execute () val responseStr=response.body () & # 63; .string () runOnUiThread {ttviewResponse。文本=responseStr} }捕捉(e:例外){ } }.start () }
这段代码中的val url值是根据服务端的要求设置的。
val文件是手机上图片文件的位置。
val requestBody中.addFormDataPart(“还是”、“形象。png”, fileBody)的还是也是服务端要求的必要键。
最后的responseStr是上传操作之后,获取服务端的信息反馈。