为了写博客所以没有封装 使用的时候OkHttpClien() new 一次就可以了 不用new很多次
implementation 'com.squareup.okhttp:okhttp:2.6.0'
public void downPhotos(String url, String path, String photosName) throws IOException {
long fileSize;
File out = new File(path, photosName + ".mp4");
Log.e(TAG, "downPhotos: " + out.getPath());
URL myURL = new URL(url);
URLConnection conn = myURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
fileSize = conn.getContentLength();
if (fileSize <= 0)
throw new RuntimeException("can not know the file`s size");
if (is == null)
throw new RuntimeException("stream is null");
FileOutputStream fos = new FileOutputStream(out);
byte buf[] = new byte[1024];
do {
// 循环读取
int numread = is.read(buf);
if (numread == -1) {
break;
}
fos.write(buf, 0, numread);
} while (true);
try {
is.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void initView() {
mBtDown = (Button) findViewById(R.id.bt_down);
mBtDown.setOnClickListener(this);
}
private void downOneVideo(final String url) {
new Thread() {
@Override
public void run() {
super.run();
try {
downPhotos(url, Environment.getExternalStorageDirectory().getAbsolutePath(), "vodeo");
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "run: " + e);
}
}
}.start();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.bt_down:
initData();
break;
}
}
public void doGet(String url) {
//1 拿到okhttpCLien对象
// 实际上创建一个成员变量即可 为了写博客 所以我写了很多个
OkHttpClient okHttpClient = new OkHttpClient();
//2 构建Request
Request.Builder builder = new Request.Builder();
final Request request = builder.get().url(url).build();
//3 讲request 对象分装成call
Call call = okHttpClient.newCall(request);
// 直接执行
// call.execute();
// 异步操作
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
L.e("onFailure" + e.getMessage());
}
@Override
public void onResponse(Response response) throws IOException {
L.e("onResponse");
String res = null;
try {
res = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
L.e("onResponse" + res);
}
});
}
public void doPost(String url) {
//1 拿到okhttpCLien对象
OkHttpClient okHttpClient = new OkHttpClient();
//2 构建Request
//2.1 构建RequestBody
// 持久化session
okHttpClient.setCookieHandler(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
FormEncodingBuilder formEncodingBuilder = new FormEncodingBuilder();
RequestBody requestBody = formEncodingBuilder.add("userName", "123").add("password", "123").build();
Request.Builder builder = new Request.Builder();
Request request = builder.url(url).post(requestBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
}
public void doPostString(String url) {
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plan;chaset=utf-8"), "{username:aaa,password:123}");
Request.Builder builder = new Request.Builder();
Request request = builder.url(url).post(requestBody).build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
}
public void doPostFile(String url, File file) {
if (!file.exists()) {
L.e(file.getName() + "not exitst!");
return;
}
// mime type
RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
Request.Builder builder = new Request.Builder();
Request request = builder.url(url).post(requestBody).build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
}
public void doUpload(String url, File file) {
if (!file.exists()) {
L.e(file.getName() + "not exitst!");
return;
}
MultipartBuilder multipartBuilder = new MultipartBuilder();
RequestBody requestBody = multipartBuilder
.type(MultipartBuilder.FORM)
.addFormDataPart("username", "aaa")
.addFormDataPart("password", "123")
.addFormDataPart("mPhoto", "test.jpg", RequestBody.create(MediaType.parse("application/octet-stream"), file)).build();
// mime type
CountingRequestBody countingRequestBody = new CountingRequestBody(requestBody, new CountingRequestBody.Listener() {
@Override
public void onRequestProgress(long byteWrited, long contentLength) {
L.e(byteWrited + "/" + contentLength);
}
});
Request.Builder builder = new Request.Builder();
Request request = builder.url(url).post(countingRequestBody).build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
}
});
}
public void doDownLoad(String url) {
Request.Builder builder = new Request.Builder();
Request request = builder.get().url(url).build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
long total = response.body().contentLength();
long sum=0L;
InputStream is = response.body().byteStream();
int len = 0;
File file = new File(Environment.getExternalStorageDirectory(), "down12306.jpg");
byte[] buf = new byte[128];
FileOutputStream fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
sum+=len;
L.e(sum+"/"+total);
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
fos.flush();
fos.close();
is.close();
L.e("downSucess");
}
});
}
public void doDownLoadImageView(String url) {
Request.Builder builder = new Request.Builder();
Request request = builder.get().url(url).build();
Call call = new OkHttpClient().newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
@Override
public void onResponse(Response response) throws IOException {
InputStream is = response.body().byteStream();
// 图片加载
// BitmapFactory.Options
Bitmap bitmap = BitmapFactory.decodeStream(is);
// is.mark();
// is.reset();
runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
}
});
}
package com.example.liuan.downvideo.net;
import android.net.sip.SipSession;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.RequestBody;
import java.io.IOException;
import okio.Buffer;
import okio.BufferedSink;
import okio.ForwardingSink;
import okio.Okio;
import okio.Sink;
/**
* Created by liuan on 2018/4/14.
*/
public class CountingRequestBody extends RequestBody {
protected RequestBody delegate;
private Listener listener;
private ConuntingSink conuntingSink;
public CountingRequestBody(RequestBody delegate,Listener listener) {
this.listener = listener;
this.delegate = delegate;
}
public static interface Listener{
void onRequestProgress(long byteWrited,long contentLength);
}
@Override
public MediaType contentType() {
return delegate.contentType();
}
@Override
public long contentLength() {
try {
return delegate.contentLength();
} catch (IOException e) {
return -1;
}
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
conuntingSink=new ConuntingSink(sink);
BufferedSink bufferedSink= Okio.buffer(conuntingSink);
delegate.writeTo(bufferedSink);
bufferedSink.flush();
}
protected final class ConuntingSink extends ForwardingSink{
private long bytesWritten;
public ConuntingSink(Sink delegate) {
super(delegate);
}
@Override
public void write(Buffer source, long byteCount) throws IOException {
super.write(source, byteCount);
bytesWritten+=byteCount;
listener.onRequestProgress(bytesWritten,contentLength());
}
}
}