android studio如何进行网络编程,Android Studio 网络编程 OkHttp3 用法

不得不说真是天下文章一大抄,坑真多,费了好大的劲,才成功搞定android 的http请求。

本来想用人家封装好的,发现都有各种错误,okhttp已经更新了,部分函数也变动了,博客没改,git也没改,

想想还是从基础做起,慢慢封装自己的一些公用类吧。

一、准备工作

到官网下载最新版的okhttp.jar

下载地址:http://square.github.io/okhttp/

拷贝到libs文件夹,右键-Add As Library,这时需要稍等10秒钟左右,AS要构建函数库。

添加权限:

下边就能正式使用了。

二、直接上代码

/**

* 上传文件及参数

*/

private void sendMultipart(){

File sdcache = getExternalCacheDir();

int cacheSize = 10 * 1024 * 1024;

//设置超时时间及缓存,下边都应该这样设置的。

OkHttpClient.Builder builder = new OkHttpClient.Builder()

.connectTimeout(15, TimeUnit.SECONDS)

.writeTimeout(20, TimeUnit.SECONDS)

.readTimeout(20, TimeUnit.SECONDS)

.cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));

OkHttpClient mOkHttpClient=builder.build();

RequestBody requestBody = new MultipartBody.Builder()

.setType(MultipartBody.FORM)

.addFormDataPart("title", "wangshu")//设置post的参数

.addFormDataPart("image", "wangshu.jpg",//如何接收图片,还在研究

RequestBody.create(MEDIA_TYPE_PNG, new File("/sdcard/wangshu.jpg")))

.build();

Request request = new Request.Builder()

.header("Authorization", "Client-ID " + "...")

.url("https://***.php")//请求的url

.post(requestBody)

.build();

mOkHttpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

Log.i("InfoMSG", response.body().string());

}

});

}

/**

* 异步下载文件

*/

private void downAsynFile() {

OkHttpClient mOkHttpClient = new OkHttpClient();

String url = "http://***.jpg";

Request request = new Request.Builder().url(url).build();

mOkHttpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) {

InputStream inputStream = response.body().byteStream();

FileOutputStream fileOutputStream = null;

try {

fileOutputStream = new FileOutputStream(new File("/sdcard/123.jpg"));

byte[] buffer = new byte[2048];

int len = 0;

while ((len = inputStream.read(buffer)) != -1) {

fileOutputStream.write(buffer, 0, len);

}

fileOutputStream.flush();

} catch (IOException e) {

Log.i("InfoMSG", "IOException");

e.printStackTrace();

}

Log.d("InfoMSG", "文件下载成功");

}

});

}

/**

* 异步上传文件

*/

private void postAsynFile() {

OkHttpClient mOkHttpClient=new OkHttpClient();

File file = new File("/sdcard/123.txt");

Request request = new Request.Builder()

.url("https://www.****.php")

.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))

.build();

mOkHttpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

Log.i("InfoMSG",response.body().string());

}

});

}

private void getAsynHttp() {

OkHttpClient mOkHttpClient=new OkHttpClient();

Request.Builder requestBuilder = new Request.Builder().url("http://www.baidu.com");

//可以省略,默认是GET请求

requestBuilder.method("GET",null);

Request request = requestBuilder.build();

Call mcall= mOkHttpClient.newCall(request);

mcall.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

if (null != response.cacheResponse()) {

String str = response.cacheResponse().toString();

Log.i("InfoMSG", "cache---" + str);

} else {

response.body().string();

String str = response.networkResponse().toString();

Log.i("InfoMSG", "network---" + str);

}

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();

}

});

}

});

}

/**

* 异步http post数据

*/

private void postAsynHttp() {

OkHttpClient mOkHttpClient = new OkHttpClient();

RequestBody formBody = new FormBody.Builder()

.add("tel", "10")

.build();

Request request = new Request.Builder()

.url("http://192.168.1.105/interface/index.php")

.post(formBody)

.build();

Call call = mOkHttpClient.newCall(request);

call.enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

String str = response.body().string();

Log.i("InfoMSG", str);

runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(getApplicationContext(), "请求成功", Toast.LENGTH_SHORT).show();

}

});

}

});

}

/**

* post JSON 对象

*/

private void postJSONObj(){

File sdcache = getExternalCacheDir();

int cacheSize = 10 * 1024 * 1024;

//设置超时时间及缓存

OkHttpClient.Builder builder = new OkHttpClient.Builder()

.connectTimeout(15, TimeUnit.SECONDS)

.writeTimeout(20, TimeUnit.SECONDS)

.readTimeout(20, TimeUnit.SECONDS)

.cache(new Cache(sdcache.getAbsoluteFile(), cacheSize));

OkHttpClient mOkHttpClient=builder.build();

RequestBody requestBody1=RequestBody.create(JSON,"\"user\":\"abc\"");

Request request = new Request.Builder()

.url("https://***.php")

.post(requestBody1)

.build();

mOkHttpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

}

@Override

public void onResponse(Call call, Response response) throws IOException {

Log.i("InfoMSG", response.body().string());

}

});

}

三、服务器接收

$_REQUEST["tel"]//接收post的参数

$GLOBALS["HTTP_RAW_POST_DATA"]//接收json对象

1、上传图片

$act = $_GET["action"];

if ($act == "postimg") {

$content = file_get_contents("php://input");

$imgName = time();

$folder = "images";

$file_dir = $folder . "/" . $imgName . ".jpg";

try {

if (!file_exists($folder)) {//判断目录是否存在

mkdir($folder);//创建目录

}

if ($fp = fopen($file_dir, 'w')) {

if (fwrite($fp, $content)) {//写入文件

fclose($fp);

}

}

} catch(Exception $ex) {

echo "".$ex;

}

echo "图片上传成功";

} 其他用法逐步尝试整理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值