okhttp2.6使用get和post 上傳和下載檔案 普通的下載
阿新 • • 發佈:2019-02-08
為了寫部落格所以沒有封裝 使用的時候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()); } } }