最新多线程下载Demo

第一步 :导依赖

compile 'com.youth.banner:banner:1.4.9'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:recyclerview-v7:26.+'
compile 'org.easybatch:easybatch-gson:5.1.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okio:okio:1.13.0'
compile 'fm.jiecao:jiecaovideoplayer:5.5'



《清单文件》

<activity android:name=".activity.MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:screenOrientation="portrait"


    >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>


第二步:网络加权限

<uses-permission android:name="android.permission.INTERNET"

第三步:封装retrofit+Rxjava

建一个Net 工具包

get 请求

RequestApi

package com.example.snmsung.disanzhoukaomonidemo.net;


import com.example.snmsung.disanzhoukaomonidemo.Bean.MyBean;

import retrofit2.http.GET;
import rx.Observable;



public interface RequestApi {

    public static final String BASE_URL = "根据需求";

    @GET("根据需求")
    Observable<MyBean> getData();
}
RetrofitUtlie

package com.example.snmsung.disanzhoukaomonidemo.net;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;


public class RetrofitUtlie {
    public static RequestApi doHttpdeal() {
        OkHttpClient Client = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS)
                //.addNetworkInterceptor(new MyInterceptro())
                .build();



        Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .client(Client)
                .baseUrl(RequestApi.BASE_URL)
                .build();
        RequestApi api = retrofit.create(RequestApi.class);
        return api;
    }


}

第四步:建Bean类

MyBean


import java.util.List;





public class MyBean {


   

    private int code;
    private String msg;
    private List<DataBean> data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
       

        private String content;
        private int id;
        private String image_url;
        private String title;
        private int type;
        private String vedio_url;

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getImage_url() {
            return image_url;
        }

        public void setImage_url(String image_url) {
            this.image_url = image_url;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public int getType() {
            return type;
        }

        public void setType(int type) {
            this.type = type;
        }

        public String getVedio_url() {
            return vedio_url;
        }

        public void setVedio_url(String vedio_url) {
            this.vedio_url = vedio_url;
        }
    }
}
第五部:适配器Adapter  RecyclerView的

MyAdapter

package com.example.snmsung.disanzhoukaomonidemo.Adapter;

import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.snmsung.disanzhoukaomonidemo.Bean.MyBean;
import com.example.snmsung.disanzhoukaomonidemo.R;

import java.util.List;

import static android.content.Context.MODE_PRIVATE;


public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> implements View.OnClickListener {
    private Context context;
    private List<MyBean.DataBean> data;
    private MyHolder myHolder;
    private OnItemClickListener mOnItemClickListener1 = null;
    private OnItemClickListener mOnItemClickListener = null;


    @Override
    public void onClick(View view) {
        if (mOnItemClickListener != null) {
            //注意这里使用getTag方法获取position
            mOnItemClickListener.onItemClick(view, (int) view.getTag());
            SharedPreferences sfp=context.getSharedPreferences("user",MODE_PRIVATE);
            sfp.edit().putString("url",data.get((int) view.getTag()).getVedio_url()).commit();
        }
    }

    public static interface OnItemClickListener {
        void onItemClick(View view, int position);
    }

    public MyAdapter(Context context, List<MyBean.DataBean> list1) {
        this.context = context;
        this.data = list1;
    }

    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(context, R.layout.item, null);
        myHolder = new MyHolder(view);
        //将创建的View注册点击事件
        view.setOnClickListener(this);

        return myHolder;
    }

    @Override
    public void onBindViewHolder(MyHolder holder, int position) {
        holder.textView.setText(data.get(position).getTitle());
        Glide.with(context).load(data.get(position).getImage_url()).into(holder.imageView);
        //将position保存在itemView的Tag中,以便点击时进行获取
        myHolder.itemView.setTag(position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }

    @Override
    public int getItemCount() {
        return data == null ? 0 : data.size();
    }

    public class MyHolder extends RecyclerView.ViewHolder {

        private final ImageView imageView;
        private final TextView textView;

        public MyHolder(View itemView) {
            super(itemView);
            imageView = (ImageView) itemView.findViewById(R.id.img);
            textView = (TextView) itemView.findViewById(R.id.tv);
        }
    }


}
 BaseAdapter的

package com.example.snmsung.disanzhoukaomonidemo.Adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.example.snmsung.disanzhoukaomonidemo.Bean.MyBean;
import com.example.snmsung.disanzhoukaomonidemo.R;

import java.util.List;

import static android.R.id.list;


public class MyAdapter1 extends BaseAdapter{
  List<MyBean.DataBean> list1;
    private Context context;
    private MyViewHolder myViewHolder;

    public MyAdapter1(Context context, List<MyBean.DataBean> list1) {
        this.context=context;
        this.list1=list1;
    }

    @Override
    public int getCount() {
        return list1==null?0:list1.size();
    }

    @Override
    public Object getItem(int i) {
        return list1.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        if (convertView==null){
            convertView=View.inflate(context, R.layout.item1,null);
            myViewHolder = new MyViewHolder();
            myViewHolder.imageView=(ImageView) convertView.findViewById(R.id.img1);
            convertView.setTag(myViewHolder);
        }else{
            myViewHolder= (MyViewHolder) convertView.getTag();
        }
        Glide.with(context).load(list1.get(i).getImage_url()).into(myViewHolder.imageView);
        return convertView;
    }

    public  class MyViewHolder{

        ImageView imageView;

    }
}
第六步:建一个Utiles工具包

DialogUtils

package com.example.snmsung.disanzhoukaomonidemo.Utlies;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;

import com.example.snmsung.disanzhoukaomonidemo.activity.ShiPinBoFang;

import java.io.File;
import java.io.IOException;

import static android.content.Context.MODE_APPEND;



public class DialogUtils {
    private Context context;
    public static long MAX_SIZE = 0;
    public static long PROGRESS = -2;
    private static String userr;


    public static void showUpdataDialog(final Context context) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("是否更新");
        builder.setMessage("太旧了,更新吧");
        builder.setNegativeButton("就不", null);
        builder.setPositiveButton("可以", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                SharedPreferences sharedPreferences = context.getSharedPreferences("user", MODE_APPEND);
                userr = sharedPreferences.getString("url", null);
                Log.i("=======asdsasdsa=======", "onClick: " + userr);
                new DownLoadThread(userr, context.getCacheDir() + "shipin.mp4").start();
                showProgress(context);
            }
        });
        builder.show();
    }

    public static void showProgress(final Context context) {
        final ProgressDialog pd = new ProgressDialog(context);
        pd.setTitle("正在更新");
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMax(100);
        pd.show();

        new AsyncTask<String, Integer, String>() {

            @Override
            protected String doInBackground(String... strings) {
                while (PROGRESS + 1 < MAX_SIZE) {
                    SystemClock.sleep(100);
                    if (MAX_SIZE > 0) {
                        publishProgress((int) (PROGRESS * 100 / MAX_SIZE));

                    }


                }
                return null;
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                pd.dismiss();
                File file = new File(context.getCacheDir() + "/app-release.apk");
                String command = "chmod " + "777" + " " + file.getPath();
                Runtime runtime = Runtime.getRuntime();
                try {
                    runtime.exec(command);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                Bundle bundle = new Bundle();
                Intent intent = new Intent(context, ShiPinBoFang.class);
                bundle.putString("userr", userr);
                intent.putExtras(bundle);
                context.startActivity(intent);
//
//                Intent intent = new Intent(Intent.ACTION_VIEW);
 由于没有在Activity环境下启动Activity,设置下面的标签
//                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//                intent.setDataAndType(Uri.fromFile(file),
//                        "application/vnd.android.package-archive");
//                context.startActivity(intent);
//
            }

            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
                pd.setProgress(values[0]);
            }
        }.execute();
    }

}

DownLoadTask
package com.example.snmsung.disanzhoukaomonidemo.Utlies;



public class DownLoadTask extends  Thread{
    String downLoadUrl;
    String path;
    int blockSize;
    int startPosition;

    public DownLoadTask(String downLoadUrl, String path, int blockSize, int startPosition) {
        this.downLoadUrl = downLoadUrl;
        this.path = path;
        this.blockSize = blockSize;
        this.startPosition = startPosition;
    }

    @Override
    public void run() {
        super.run();
        NetUtils.downloadFile(downLoadUrl,path,blockSize,startPosition);
    }
}

DownLoadThread

package com.example.snmsung.disanzhoukaomonidemo.Utlies;


public class DownLoadThread extends  Thread{

    private String downLoadUrl = "";
    private String path;
    private int threadNum = 5;

    public DownLoadThread(String downLoadUrl, String path) {
        this.downLoadUrl = downLoadUrl;
        this.path = path;
        this.threadNum = threadNum;
    }

    @Override
    public void run() {
        int len = NetUtils.getFileLength(downLoadUrl);
        DialogUtils.MAX_SIZE = len;
        int blockSize = len / threadNum;
        for (int i = 0; i < threadNum; i++) {
            int startPosition = i * blockSize;
            if (i == threadNum - 1) {
                blockSize = len - blockSize * (threadNum - 1);
            }
            new DownLoadTask(downLoadUrl, path, blockSize, startPosition).start();
        }
    }
}

NetUtils
package com.example.snmsung.disanzhoukaomonidemo.Utlies;

import android.util.Log;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
 


public class NetUtils {

    public static void downloadFile(String downloadUrl, String path, int blockSize, int startPosition){
        BufferedInputStream bis = null;
        RandomAccessFile raf = null;
        try {
            File f = new File(path);
            if(!f.exists()){
                f.createNewFile();
            }
            URL url = new URL(downloadUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(8000);
            conn.setConnectTimeout(8000);

//            long start = 0;
            if(blockSize > 0){
//                //使用线程id来计算 当前线程的开始位置和结束位置
//                start = blockSize * threadId;
                long end = blockSize + startPosition - 1;
                //多线程下载  需要告诉服务器我要请求的是哪部分内容  需要写在请求头里面
                conn.setRequestProperty("Range", "bytes=" + startPosition + "-" + end);

                Log.i(Thread.currentThread() + "======", "bytes=" + startPosition + "-" + end);
            }


            int code = conn.getResponseCode();
            if(code < 400){
                bis = new BufferedInputStream(conn.getInputStream());
                raf = new RandomAccessFile(f, "rwd");
                //
                raf.seek(startPosition);
                //
                int len = 0;
                byte[] buff = new byte[1024 * 8];
                while((len = bis.read(buff)) != -1){
                    synchronized (NetUtils.class){
                        raf.write(buff, 0, len);
                        if(DialogUtils.PROGRESS<0)
                        {
                            DialogUtils.PROGRESS=0;
                        }

                        DialogUtils.PROGRESS += len;
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(bis != null){
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(raf != null){
                try {
                    raf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    public static int getFileLength(String downloadUrl){
        int len = 0;
        try {
            URL url = new URL(downloadUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(8000);
            conn.setConnectTimeout(8000);

            len = conn.getContentLength();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return len;
    }



}
MainActivity   类

package com.example.snmsung.disanzhoukaomonidemo.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;

import com.example.snmsung.disanzhoukaomonidemo.Adapter.MyAdapter;
import com.example.snmsung.disanzhoukaomonidemo.Bean.MyBean;
import com.example.snmsung.disanzhoukaomonidemo.ImagGithub.ImgGithub;
import com.example.snmsung.disanzhoukaomonidemo.R;
import com.example.snmsung.disanzhoukaomonidemo.net.RetrofitUtlie;
import com.youth.banner.Banner;

import java.util.ArrayList;
import java.util.List;

import rx.Observer;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {

    private Banner banner;


    private List<String> list;
    private RecyclerView recyclerView;
    private MyAdapter myAdapter;
    private List<MyBean.DataBean> data1;
    private MyAdapter myAdapter1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到控件
        inidata();

        recyclerView.setLayoutManager(new LinearLayoutManager(this));

    }

    private void inidata() {

        banner = (Banner) findViewById(R.id.banner);
        recyclerView = (RecyclerView) findViewById(R.id.rec);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        banner.setImageLoader(new ImgGithub());
        list = new ArrayList<>();
        list.add("http://pic32.nipic.com/20130817/9745430_101836881000_2.jpg");
        list.add("http://pic15.nipic.com/20110630/6322714_105943746342_2.jpg");
        list.add("http://pic48.nipic.com/file/20140916/2531170_195153248000_2.jpg");
        list.add("http://img.taopic.com/uploads/allimg/140626/240469-1406261S24553.jpg");
        list.add("http://pic77.nipic.com/file/20150911/21721561_155058651000_2.jpg");
        list.add("http://img4.duitang.com/uploads/item/201603/18/20160318103156_cziuY.jpeg");
        banner.setImages(list);
        banner.start();


        //网络请求
        qingqiu();

    }

    private void qingqiu() {

        RetrofitUtlie.doHttpdeal().getData()
               .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MyBean>() {
                    @Override
                    public void onCompleted() {
                        Log.i("======", "onNext: "+data1);
                    }

                    @Override
                    public void onError(Throwable e) {
                        e.printStackTrace();
                        Log.i("====12===", "onNext: "+e.toString());
                    }

                    @Override
                    public void onNext(MyBean myBean) {
                        data1 = myBean.getData();
                        Log.i("======3======", "onNext: "+data1);

                        myAdapter1 = new MyAdapter(MainActivity.this, data1);
                        recyclerView.setAdapter(myAdapter1);
                        myAdapter1.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
                            @Override
                            public void onItemClick(View view, int position) {


                                Intent intent=new Intent(MainActivity.this,ShiPin.class);
                                startActivity(intent);
                            }
                        });
                    }
                });


    }
}
ShiPin类

package com.example.snmsung.disanzhoukaomonidemo.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.VideoView;

import com.example.snmsung.disanzhoukaomonidemo.R;
import com.example.snmsung.disanzhoukaomonidemo.Utlies.DialogUtils;
import com.example.snmsung.disanzhoukaomonidemo.common.PlayerManager;

public class ShiPin extends AppCompatActivity {
    private PlayerManager player;

    private VideoView video_view;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shi_pin);
        Intent intent=getIntent();
      String  vedio_url = intent.getStringExtra("url");


        DialogUtils.showUpdataDialog(this);

    }



}


ShiPinBoFang 类

package com.example.snmsung.disanzhoukaomonidemo.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.MediaController;
import android.widget.VideoView;

import com.example.snmsung.disanzhoukaomonidemo.R;

import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard;

public class ShiPinBoFang extends AppCompatActivity {
    private JCVideoPlayerStandard jcVideoPlayerStandard;



    private VideoView video1;
    private VideoView vv_video;

    /*
    使用VideoView+MediaController实现视频播放器
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shi_pin_bo_fang);
        video1 = (VideoView)findViewById(R.id.vidoView);
        Intent intent=getIntent();
        String url = intent.getStringExtra("userr");
        //设置播放的来源
        video1.setVideoPath(url);
        //实例化媒体控制器
        MediaController mediaController=new MediaController(this);
        mediaController.setMediaPlayer(video1);
        video1.setMediaController(mediaController);
        }


//        getSupportActionBar().setTitle("jiecaovideoplayer的使用");
//        jcVideoPlayerStandard= (JCVideoPlayerStandard) findViewById(R.id.jiecao_Player);
//        jcVideoPlayerStandard.setUp(url,jcVideoPlayerStandard.SCREEN_LAYOUT_NORMAL,"视频标题");

//        Log.i("**********asdfg********", "onCreate: "+url.toString());
//    }
//    @Override
//    public void onBackPressed() {
//        if (JCVideoPlayer.backPress()){
//            return;
//        }
//        super.onBackPressed();
//    }
//
//    @Override
//    protected void onPause() {
//        super.onPause();
//        JCVideoPlayer.releaseAllVideos();
//    }


}
Main   布局XML


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.snmsung.disanzhoukaomonidemo.activity.MainActivity">

    <com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="205dp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rec"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>

</LinearLayout>
Shipin  布局XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.snmsung.disanzhoukaomonidemo.activity.ShiPin">


    <com.example.snmsung.disanzhoukaomonidemo.widget.media.IjkVideoView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

 ShiPinBoFang布局 XML


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

    <VideoView
        android:id="@+id/vidoView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></VideoView>
</LinearLayout>
  item  XML


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
 >

    <ImageView
        android:id="@+id/img"
        android:layout_width="120dp"
        android:layout_height="120dp" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25dp" />
</LinearLayout>


item1  XML


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

 <ImageView
     android:id="@+id/img1"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />
</LinearLayout>



封装ImgGithub 



package com.example.snmsung.disanzhoukaomonidemo.ImagGithub;

import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.youth.banner.loader.ImageLoader;




public class ImgGithub extends ImageLoader{

    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        Glide.with(context).load(path).into(imageView);
    }
}

封装Okhttp

Okutil 

package com.example.snmsung.disanzhoukaomonidemo.okhttp;

import android.os.Handler;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;


public class Okutil {
    private Handler handler=new Handler();
    public Handler gerhanlder(){
        return handler;
    }
    private static Okutil okutil=new Okutil();
    private Okutil(){};
    public static Okutil getinstans(){
        return okutil;
    }
    private OkHttpClient okHttpClient;
    public void init(){
        if (okHttpClient==null){
            okHttpClient=new OkHttpClient.Builder().build();
        }
    }
    public void doget(String url, Callback callback){
        init();

        Request request=new Request.Builder().addHeader("User-Agent","").url(url).build();
        Call call=okHttpClient.newCall(request);
        call.enqueue(callback);
    }
}



 
Okutilback 

package com.example.snmsung.disanzhoukaomonidemo.okhttp;

import android.os.Handler;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Request;
import okhttp3.Response;


public abstract class Okutilback implements Callback{
    private Handler handler=Okutil.getinstans().gerhanlder();
    public abstract void OnFild(Call call, IOException e);
    public abstract void OnSuccess(String request) throws Exception;

    @Override
    public void onFailure(final Call call, final IOException e) {
        handler.post(new Runnable() {
            @Override
            public void run() {
                OnFild(call, e);
            }
        });
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        final String str=response.body().string();
        handler.post(new Runnable() {
            @Override
            public void run() {
                try {
                    OnSuccess(str);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}


网络拦截器


package com.example.snmsung.disanzhoukaomonidemo;

import android.util.Log;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;


public class MyInterceptro implements Interceptor {


    @Override
    public Response intercept(Chain chain) throws IOException {

        Request request=chain.request();
        Log.i("===url====", "intercept: "+request.url());
        Log.i("====res_headers====", "intercept: "+request.headers());
      Response res=  chain.proceed(request);
        Log.i("=====req_headers===", "intercept: "+res.headers());
        Log.i("====body=======", "intercept: "+res.body().string());
        return res;
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值