专高二

网络请求OkHttp Okgo

get请求下载大虾串

//下载大虾串
public void get(View view) {
    //创建一个请求
    OkHttpClient client = new OkHttpClient.Builder()
            .readTimeout(60*1000, TimeUnit.MILLISECONDS)
            .writeTimeout(60*1000, TimeUnit.MILLISECONDS)
            .connectTimeout(60*1000, TimeUnit.MILLISECONDS)
            .build();
    //发送请求
    final Request request = new Request.Builder()
            .get()
            .url("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=10&page=1")
            .build();
    //发送
    Call call = client.newCall(request);
    //底层线程池
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            //失败
            final String message = e.getMessage();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "请求失败"+message, Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            ResponseBody body = response.body();
            //成功
            final String string = body.string();

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "请求成功"+string, Toast.LENGTH_SHORT).show();
                }
            });
        }
    });

}

Get请求 下载图片

public void xiaz(View view) {
    //判断是否存在
    File file = new File("/sdcard/Download/erha.jpg");
    if (file.exists()){
        Toast.makeText(this, "文件已存在", Toast.LENGTH_SHORT).show();
        return;
    }

    //创建一个请求
    OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(60*1000, TimeUnit.MILLISECONDS)
            .readTimeout(60*1000, TimeUnit.MILLISECONDS)
            .writeTimeout(60*1000, TimeUnit.MILLISECONDS)
            .build();

    //发送请求
    Request request = new Request.Builder()
            .get()
            .url("https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg")
            .build();
    //发送
    Call call = client.newCall(request);
    //底层线程池
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            //失败
            final String message = e.getMessage();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "请求失败"+message, Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public void onResponse(Call call, Response response)  {//成功
            //流
            InputStream inputStream = response.body().byteStream();
            FileOutputStream fileOutputStream = null;
            try {
                //读流
                fileOutputStream = new FileOutputStream("/sdcard/Download/erha.jpg");
                int len = 0;
                byte[] bytes = new byte[1024];

                while ((len=inputStream.read(bytes)) != -1) {
                    //传
                    fileOutputStream.write(bytes,0,len);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                //关闭
                if (inputStream!=null){
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fileOutputStream!=null){
                    try {
                        fileOutputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }


            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "请求成功", Toast.LENGTH_SHORT).show();
                }
            });
        }
    });

}

网络请求接口的登录或注册 post form表单格式 FormBody

//点击事件
vtLogin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //获取数据
        String name = etUsername.getText().toString().trim();
        String pwd = etPassword.getText().toString().trim();
        //非空判断
        if (TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd)){
            Toast.makeText(RegActivity.this, "不能空", Toast.LENGTH_SHORT).show();
            return;
        }

        //请求
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(60 * 1000, TimeUnit.MILLISECONDS)
                .writeTimeout(60 * 1000, TimeUnit.MILLISECONDS)
                .connectTimeout(60 * 1000, TimeUnit.MILLISECONDS)
                .build();

        //创建post
        FormBody formBody = new FormBody.Builder()
                .add("name",name)
                .add("password",pwd)
                .build();
        //创建请求
        Request request = new Request.Builder()
                .post(formBody)
                .url("http://49.233.0.68:8080/register")
                .build();
        //提交
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(RegActivity.this, "请求失败", Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(RegActivity.this, ""+string, Toast.LENGTH_SHORT).show();
                    }
                });
                //解析后判断
                Gson gson = new Gson();
                RegBean regBean = gson.fromJson(string, RegBean.class);
                if (regBean.getCode().equals("200")){
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(RegActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                }else{
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(RegActivity.this, "注册失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }


            }
        });

    }
});

搜索附近视频,post json格式 提交 RequestBody

public void postjson(View view) {
    //请求
    OkHttpClient client = new OkHttpClient.Builder()
            .readTimeout(60*100,TimeUnit.MILLISECONDS)
            .writeTimeout(60*100,TimeUnit.MILLISECONDS)
            .connectTimeout(60*100,TimeUnit.MILLISECONDS)
            .build();

    //格式
    MediaType parse = MediaType.parse("application/json;charset:utf-8");
    //json串
    HashMap<String, String> hashMap = new HashMap<>();
    hashMap.put("lat","102.2");
    hashMap.put("lon","123.88");
    Gson gson = new Gson();
    String s = gson.toJson(hashMap);
    //post json 的类
    RequestBody requestBody = RequestBody.create(parse,s);

    //创建
    Request request = new Request.Builder()
            .post(requestBody)
            .url("http://49.233.0.68:8080/searchAround")
            .build();

    //发送
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            final String message = e.getMessage();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            final String string = response.body().string();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, ""+string, Toast.LENGTH_SHORT).show();
                }
            });
        }
    });
}

上传文件 post 提交MultipartBody

//上传文件
public void up(View view) {
    //请求
    OkHttpClient client = new OkHttpClient.Builder()
            .readTimeout(60*100,TimeUnit.MILLISECONDS)
            .writeTimeout(60*100,TimeUnit.MILLISECONDS)
            .connectTimeout(60*100,TimeUnit.MILLISECONDS)
            .build();


    //创建参数
    RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"), new File("/sdcard/Download/erha.jpg"));

    //创建参数
    MultipartBody build = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("file","zheserh.jpg",requestBody)
            .build();

    //创建
    Request request = new Request.Builder()
            .post(build)
            .url("http://117.51.155.210/hfs/")
            .build();

    //发送
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            final String message = e.getMessage();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
                }
            });
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
                }
            });
        }
    });
}

单例模式

//私有化构造
private OkhttpUtils() {
    //只new一次
    OkHttpClient = new OkHttpClient.Builder(){}

//私有化对象
private static OkhttpUtils okhttpUtils = new OkhttpUtils();

//公开方法
public static OkhttpUtils getInstance(){
    if (okhttpUtils==null){
        okhttpUtils=new OkhttpUtils();
    }
    return okhttpUtils;
};

OkhttpUtils工具类 //拦截器 //get请求大虾//post请求用户名密码 //postjson请求


package com.example.day003.Utils;

import android.os.Handler;
import android.os.Message;
import android.widget.Toast;

import androidx.annotation.NonNull;

import com.example.day003.callback.Mycallback;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class OkhttpUtils {

    //回到主线程
    private Handler handler = new Handler();

    //静态常量
    public static final  long DEFAULT_TIME=60*1000;

    //创建Client
    private OkHttpClient OkHttpClient;

    //私有化构造
    private OkhttpUtils() {

        //log拦截器
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        //自定义拦截器加请求头
        Interceptor interceptor = new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request build = chain.request().newBuilder().header("appVersion","1.0").build();

                return chain.proceed(build);
            }
        };

        //只new一次
        OkHttpClient = new OkHttpClient.Builder()
                .readTimeout(DEFAULT_TIME, TimeUnit.MILLISECONDS)
                .writeTimeout(DEFAULT_TIME, TimeUnit.MILLISECONDS)
                .connectTimeout(DEFAULT_TIME, TimeUnit.MILLISECONDS)
                .addInterceptor(interceptor)//添加自定义拦截器加请求头
                .addInterceptor(httpLoggingInterceptor)//添加log拦截器
                .build();
    }

    //私有化对象
    private static OkhttpUtils okhttpUtils = new OkhttpUtils();

    //公开方法
    public static OkhttpUtils getInstance(){
        if (okhttpUtils==null){
            okhttpUtils=new OkhttpUtils();
        }
        return okhttpUtils;
    };

    //get请求大虾
    public void doGet(String url, final Mycallback mycallback){
        //get请求
        Request request = new Request.Builder()
                .get()
                .url(url)
                .build();

        OkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                final String message = e.getMessage();
                //主线程发送
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mycallback!=null){
                            mycallback.onError(message);

                        }
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                //主线程发送
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mycallback!=null){
                            mycallback.onOK(string);
                        }
                    }
                });


            }
        });

    }


    //post请求用户名密码
    public void doPost(String url, HashMap<String,String> hashMap, final Mycallback mycallback){

        //表单提交
        FormBody.Builder builder = new FormBody.Builder();
        //填充参数
        Set<Map.Entry<String, String>> entries = hashMap.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            builder.add(key,value);
        }
        FormBody formBody = builder.build();
        //post请求
        Request request = new Request.Builder()
                .post(formBody)
                .url(url)
                .build();

        OkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                final String message = e.getMessage();
                //主线程发送
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mycallback!=null){
                            mycallback.onError(message);

                        }
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                //主线程发送
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mycallback!=null){
                            mycallback.onOK(string);
                        }
                    }
                });


            }
        });

    }


    //postjson请求
    public void doPost_json(String url, HashMap<String,String> hashMap, final Mycallback mycallback){

        Gson gson = new Gson();
        String s = gson.toJson(hashMap);

        MediaType parse = MediaType.parse("application/json;charset:utf-8");

        RequestBody requestBody = RequestBody.create(parse,s);

        //post请求
        Request request = new Request.Builder()
                .post(requestBody)
                .url(url)
                .build();

        OkHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                final String message = e.getMessage();
                //主线程发送
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mycallback!=null){
                            mycallback.onError(message);

                        }
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String string = response.body().string();
                //主线程发送
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mycallback!=null){
                            mycallback.onOK(string);
                        }
                    }
                });


            }
        });
    }
}

MainActivity调用 //拦截器 //get请求大虾//post请求用户名密码 //postjson请求

package com.example.day003;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;

import com.example.day003.Utils.OkhttpUtils;
import com.example.day003.callback.Mycallback;

import java.util.HashMap;

import okhttp3.OkHttpClient;

public class MainActivity extends AppCompatActivity {



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

//        请求大虾串
        OkhttpUtils.getInstance().doGet("http://49.233.0.68:8080/findVideo", new Mycallback() {
            @Override
            public void onOK(final String json) {
                Toast.makeText(MainActivity.this, ""+json, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(String message) {
                Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
            }
        });

//        post请求用户名密码
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("name","mhmhm");
        hashMap.put("password","mhmhm");

        OkhttpUtils.getInstance().doPost("http://49.233.0.68:8080/register",hashMap,new Mycallback() {
            @Override
            public void onOK(final String json) {
                Toast.makeText(MainActivity.this, ""+json, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(String message) {
                Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
            }
        });

        //post_json 请求
        HashMap<String, String> hashMap2 = new HashMap<>();
        hashMap2.put("lat","102.2");
        hashMap2.put("lon","123.88");
        OkhttpUtils.getInstance().doPost_json("http://49.233.0.68:8080/searchAround",hashMap2,new Mycallback() {
            @Override
            public void onOK(final String json) {
                Toast.makeText(MainActivity.this, ""+json, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(String message) {
                Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

Okgo 各种使用方法

//请求json
public void json(View view) {
    OkGo.<String>get("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1").execute(new StringCallback() {
        @Override
        public void onSuccess(Response<String> response) {
            String body = response.body();
            Toast.makeText(MainActivity.this, "" + body, Toast.LENGTH_SHORT).show();
        }
    });

}
//登录
public void login(View view) {
    HashMap<String, String> hashMap = new HashMap<>();
    hashMap.put("name", "qwe");
    hashMap.put("password", "qwe");

    OkGo.<String>post("http://49.233.0.68:8080/login")
            .params(hashMap)
            .execute(new StringCallback() {
                @Override
                public void onSuccess(Response<String> response) {
                    String body = response.body();
                    Toast.makeText(MainActivity.this, "" + body, Toast.LENGTH_SHORT).show();
                }
            });

}

//下载
public void downlaod(View view) {

    if (new File("/sdcard/Download/电影.mp4").exists()){
        Toast.makeText(this, "电影已下载过", Toast.LENGTH_SHORT).show();
        return;
    }

    OkGo.<File>get("http://vfx.mtime.cn/Video/2019/03/18/mp4/190318214226685784.mp4").execute(new FileCallback("/sdcard/Download","电影.mp4") {
        @Override
        public void onSuccess(Response<File> response) {
            File body = response.body();
            Toast.makeText(MainActivity.this, "" + body.getAbsolutePath() + "下载完成", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void downloadProgress(Progress progress) {
            super.downloadProgress(progress);
            float fraction = progress.fraction;
            bar.setProgress((int) (fraction*100));
        }
    });


}


//注册
public void register(View view) {
    HashMap<String, String> hashMap = new HashMap<>();
    hashMap.put("name", "qwe");
    hashMap.put("password", "qwe");
    OkGo.<String>post("http://49.233.0.68:8080/register").params(hashMap).execute(new StringCallback() {
        @Override
        public void onSuccess(Response<String> response) {
            String body = response.body();
            Toast.makeText(MainActivity.this, ""+body, Toast.LENGTH_SHORT).show();
        }
    });
}

//上传
public void uplaod(View view) {
    OkGo.<String>post("http://117.51.155.210/hfs/")
            .params("file",new File("/sdcard/Download/电影.mp4"),"电影.mp4")
            .execute(new StringCallback() {
                @Override
                public void onSuccess(Response<String> response) {
                    String body = response.body();
                    Toast.makeText(MainActivity.this, ""+body, Toast.LENGTH_SHORT).show();
                }

                @Override
                public void uploadProgress(Progress progress) {
                    super.uploadProgress(progress);
                    float fraction = progress.fraction;
                    bar.setProgress((int) (fraction*100));
                }
    });
}

//post参数为json
public void postjson(View view) {
    HashMap<String, String> hashMap = new HashMap<>();
    hashMap.put("lat", "102.2");
    hashMap.put("lon", "123.88");

    String s = new Gson().toJson(hashMap);

    OkGo.<String>post("http://49.233.0.68:8080/searchAround")
            .upJson(s)
            .execute(new StringCallback() {
        @Override
        public void onSuccess(Response<String> response) {
            String body = response.body();
            Toast.makeText(MainActivity.this, ""+body, Toast.LENGTH_SHORT).show();
        }
    });
}

Okhttp 自定义JsonCallBack 类

public abstract class JsonCallBack<T> extends AbsCallback<T> {

    private Class<T> tClass;

    public JsonCallBack(Class<T> tClass) {
        this.tClass = tClass;
    }

    @Override
    public T convertResponse(Response response) throws Throwable {
        String string = response.body().string();
        if (TextUtils.isEmpty(string)) return null;
        T t = new Gson().fromJson(string, tClass);
        return t;
    }
}

Okhttp 自定义JsonCallBack 类的使用

OkGo.<Food>get("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1").execute(new JsonCallBack<Food>(Food.class) {
    @Override
    public void onSuccess(Response<Food> response) {
        Food body = response.body();
        Toast.makeText(MainActivity.this, ""+body, Toast.LENGTH_SHORT).show();
    }
});

RecyclerView 的适配器

/1.先继承 RecyclerView.Adapter,先不要写泛型
public class Myadapter extends RecyclerView.Adapter<Myadapter.MyRvViewHolder> {

    private ArrayList<Food.DataBean> list;
    private Context context;

    public Myadapter(ArrayList<Food.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @NonNull
    @Override
    public MyRvViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //添加布局
        View inflate = LayoutInflater.from(context).inflate(R.layout.food_layout, null);
        return new MyRvViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(@NonNull MyRvViewHolder holder, int position) {
        //给布局赋值
        holder.title.setText(list.get(position).getTitle());
        Glide.with(context).load(list.get(position).getPic()).into(holder.img);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    //创建内部类先写ViewHolder 继承RecyclerView.ViewHolder
    class MyRvViewHolder extends RecyclerView.ViewHolder{
        //外面写id对象
        private ImageView img;
        private TextView title;
        public MyRvViewHolder(@NonNull View itemView) {
            super(itemView);
            //里面加载出来
            img = (ImageView) itemView.findViewById(R.id.img);
            title = (TextView) itemView.findViewById(R.id.title);
        }
    }

}

RecyclerView 调用

//添加线条
rv.addItemDecoration(new DividerItemDecoration(Main2Activity.this,DividerItemDecoration.VERTICAL));

//瀑布流
rv.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));

 Myadapter myadapter = new Myadapter(list, MainActivity.this);
                rv.setAdapter(myadapter);
                //添加布局

                //线性布局
//                rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
//线性横滑
linearLayoutManager.setOrientation(RecyclerView.HORIZONTAL);
                //网格布局
                rv.setLayoutManager(new GridLayoutManager(MainActivity.this,2));

Banner 轮播图使用

//请求数据
OkGo.<String>get("http://vueshop.glbuys.com/api/home/index/slide?token=1ec949a15fb709370f").execute(new StringCallback() {
    @Override
    public void onSuccess(Response<String> response) {
        //封装数据
        String body = response.body();
        Bnner bnner = new Gson().fromJson(body, Bnner.class);
        List<Bnner.DataBean> data = bnner.getData();

        list.addAll(data);
        
        //动画
        banner.setBannerAnimation(Transformer.CubeIn);
        //添加数据源
        banner.setImages(list);
        //设置动画
        banner.setImageLoader(new ImageLoader() {
            @Override
            public void displayImage(Context context, Object path, ImageView imageView) {
                Bnner.DataBean b = (Bnner.DataBean) path;
                String image = b.getImage();
                Glide.with(context).load("http:"+image).into(imageView);
            }
        });
        //开始  --别忘记掉用
        banner.start();


    }
});

Glide

清理缓存磁盘

//清理内存
Glide.get(MainActivity.this).clearMemory();

//磁盘是耗时操作,要在子线程
new Thread(new Runnable() {
    @Override
    public void run() {
        //清理磁盘
        Glide.get(MainActivity.this).clearDiskCache();
    }
}).start();

关闭三级缓存

//关闭三级缓存
Glide.with(MainActivity.this)
        .load("https://5b0988e595225.cdn.sohucs.com/q_70,c_zoom,w_640/images/20171203/23f6ef3a3d944fd2b72a0f1e27b9f3b4.gif")
        //关闭内存
        .skipMemoryCache(true)
        //关闭磁盘
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .into(img2);

常用方法

在这里插入图片描述

常用方法实例

//居中适配
Glide.with(MainActivity.this)
        .load("https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg")
        .transform(new CenterCrop())
        .into(img);
//圆形
Glide.with(MainActivity.this)
        .load("https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg")
        .transform(new CircleCrop())
        .into(img);
//圆角
Glide.with(MainActivity.this)
        .load("https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg")
        .transform(new CenterCrop(),new RoundedCorners(20))
        .into(img);

//占位符 和 加载失败
Glide.with(MainActivity.this)
        .load("https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg")
        
        .into(img);

GlideUtils工具类

//居中适配
public static void DisplayCenterCropGlide(Context context, String url, ImageView imageView){
    Glide.with(context)
            .load(url)
            .transform(new CenterCrop())
            .error(R.mipmap.ic_launcher)//加载失败, 填充图片
            .placeholder(R.mipmap.ic_launcher_round)//加载中, 填充图片
            .into(imageView);
}

//圆形
public static void DisplayCircleCropGlide(Context context, String url, ImageView imageView){
    Glide.with(context)
            .load(url)
            .transform(new CircleCrop())
            .error(R.mipmap.ic_launcher)//加载失败, 填充图片
            .placeholder(R.mipmap.ic_launcher_round)//加载中, 填充图片
            .into(imageView);
}

//圆角
public static void DisplayRoundedCornersGlide(Context context, String url, ImageView imageView,int size){
    Glide.with(context)
            .load(url)
            .transform(new CenterCrop(),new RoundedCorners(size))
            .error(R.mipmap.ic_launcher)//加载失败, 填充图片
            .placeholder(R.mipmap.ic_launcher_round)//加载中, 填充图片
            .into(imageView);
}

GlideUtils工具类调用

//居中适配
GlideUtils.DisplayCenterCropGlide(MainActivity.this,"https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg",img);
//圆形
GlideUtils.DisplayCircleCropGlide(MainActivity.this,"https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg",img);
//圆角
GlideUtils.DisplayRoundedCornersGlide(MainActivity.this,"https://dss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2858426577,4189650377&fm=26&gp=0.jpg",img,40);

蓝牙

打开蓝牙

//打开
public void start(View view) {
    Intent intent = new Intent();
    intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    intent.setAction(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
    startActivity(intent);
}

关闭蓝牙


//关闭
public void close(View view) {
    BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
    if (defaultAdapter != null) {
        defaultAdapter.disable();
    }
}

查看自己蓝牙名字

public void startname(View view) {
    BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
    if (defaultAdapter != null) {
        String name = defaultAdapter.getName();
        Toast.makeText(this, "" + name, Toast.LENGTH_SHORT).show();
    }
}

看已配对蓝牙设备

//查看已配对设备
public void pair(View view) {
    BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
    if (defaultAdapter != null) {
        //获取数据源
        Set<BluetoothDevice> bondedDevices = defaultAdapter.getBondedDevices();
        //添加集合
        ArrayList<BluetoothDevice> bluetoothDevices = new ArrayList<>();
        bluetoothDevices.addAll(bondedDevices);

        //适配器展示
        MyAdapter myAdapter = new MyAdapter(bluetoothDevices, MainActivity.this);
        rv.setAdapter(myAdapter);
        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));

    }
}

查看附近蓝牙设备

//查看附近设备
public void bouring(View view) {
    BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
    if (defaultAdapter != null) {
        //开始搜索
        defaultAdapter.startDiscovery();
        //创建适配器
        myAdapterrr = new MyAdapter(bluetoothlist, MainActivity.this);
        //展示
        rv2.setAdapter(myAdapterrr);
        rv2.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    }

}

查看附近蓝牙设备的广播接受者 和 注册广播

//        注册广播
        myRecevier = new MyRecevier();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
        registerReceiver(myRecevier,intentFilter);

//搜索附近设备的 广播接受者
class MyRecevier extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //判断
        if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)) {
            //返回名字
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            //添加集合,刷新适配器
            bluetoothlist.add(device);
            myAdapterrr.notifyDataSetChanged();
        }

    }
}
···


# 万能适配器


## 适配器类
```java
// 继承BaseQuickAdapter  放入试题类
public class MyQuickAdapter extends BaseQuickAdapter<Food.DataBean, BaseViewHolder> {
    //不用修改
    public MyQuickAdapter(int layoutResId, @Nullable List<Food.DataBean> data) {
        super(layoutResId, data);
    }

    //填充数据
    @Override
    protected void convert(BaseViewHolder helper, Food.DataBean item) {
        //填充数据
        helper.setText(R.id.te,item.getTitle());
        //获取对象
        ImageView img = helper.getView(R.id.img);
        Glide.with(mContext).load(item.getPic()).into(img);
        //添加点击事件
        helper.addOnClickListener(R.id.te);
        helper.addOnClickListener(R.id.img);
        helper.addOnLongClickListener(R.id.te);
        helper.addOnLongClickListener(R.id.img);

    }
}

···

## 调用适配器及其方法
```java

//放布局和数据
final MyQuickAdapter myQuickAdapter = new MyQuickAdapter(R.layout.rv_layout, data);
rv.setAdapter(myQuickAdapter);
//!!!!!!!!!!设置怎么显示
rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
//设置分割线
rv.addItemDecoration(new DividerItemDecoration(MainActivity.this,DividerItemDecoration.VERTICAL));
//短按点击方法
myQuickAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
    @Override
    public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
        Toast.makeText(MainActivity.this, "短按"+position, Toast.LENGTH_SHORT).show();
    }
});
//长按点击方法
myQuickAdapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
        Toast.makeText(MainActivity.this, "长按"+position, Toast.LENGTH_SHORT).show();
        return true;
    }
});

//文字短按
myQuickAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
    @Override
    public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
        if (view.getId()==R.id.te){
            Toast.makeText(MainActivity.this, "文字短按"+position, Toast.LENGTH_SHORT).show();
        }else if (view.getId()==R.id.img){
            Toast.makeText(MainActivity.this, "图片短按"+position, Toast.LENGTH_SHORT).show();
        }
    }
});

//文字长按
myQuickAdapter.setOnItemChildLongClickListener(new BaseQuickAdapter.OnItemChildLongClickListener() {
    @Override
    public boolean onItemChildLongClick(BaseQuickAdapter adapter, View view, int position) {
        if (view.getId()==R.id.te){
            Toast.makeText(MainActivity.this, "文字长按"+position, Toast.LENGTH_SHORT).show();
        }else if (view.getId()==R.id.img){
            Toast.makeText(MainActivity.this, "图片长按"+position, Toast.LENGTH_SHORT).show();
        }


        return true;
    }
});

//动画效果
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
    //设置  上|下  左|右
    @Override
    public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
        return makeMovementFlags(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT);
    }
    //上下拖拽
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        int adapterPosition = viewHolder.getAdapterPosition();
        int adapterPosition1 = target.getAdapterPosition();
        Collections.swap(data,adapterPosition,adapterPosition1);
        myQuickAdapter.notifyItemMoved(adapterPosition,adapterPosition1);

        return true;
    }
    //左右滑动
    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
        int adapterPosition = viewHolder.getAdapterPosition();
        data.remove(adapterPosition);
        myQuickAdapter.notifyDataSetChanged();
    }
});
//连接动画
itemTouchHelper.attachToRecyclerView(rv);

多布局适配器

//多布局适配器继承BaseMultiItemQuickAdapter
public class MyQuickAdapter2 extends BaseMultiItemQuickAdapter<Food2.DataBean,BaseViewHolder>{
    public MyQuickAdapter2(List<Food2.DataBean> data) {
        super(data);
        //添加布局
        addItemType(0,R.layout.layout_left);
        addItemType(1,R.layout.layout_reght);

    }
//添加数据
    @Override
    protected void convert(BaseViewHolder helper, Food2.DataBean item) {
        //判断布局   添加点击和动画和但布局一样
        switch (helper.getItemViewType()){
            case 0:
                helper.setText(R.id.te_left,item.getTitle());
                Glide.with(mContext).load(item.getPic()).into((ImageView) helper.getView(R.id.img_left));
                break;
            case 1:
                helper.setText(R.id.te_right,item.getTitle());
                Glide.with(mContext).load(item.getPic()).into((ImageView) helper.getView(R.id.img_right));
                break;
        }
    }
}

//继承MultiItemEntity 重写方法
public static class DataBean implements MultiItemEntity {
    @Override
    public int getItemType() {
        return num%2;
    }

万能适配器动画

在这里插入图片描述
在这里插入图片描述

抽屉布局和相机

DrawerLayout抽屉布局

<?xml version="1.0" encoding="utf-8"?>
<!--布局改成DrawerLayout-->
<androidx.drawerlayout.widget.DrawerLayout 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=".MainActivity"
    android:id="@+id/drawer">

<!--    第一部分写主页面-->
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

<!--        改头镖-->
        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#FFEB3B">
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@mipmap/ic_launcher_round"
                    android:id="@+id/open"></ImageView>
                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@mipmap/ic_launcher_round"
                    android:layout_alignParentRight="true"></ImageView>

            </RelativeLayout>


        </androidx.appcompat.widget.Toolbar>

        <androidx.viewpager.widget.ViewPager
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/vp"></androidx.viewpager.widget.ViewPager>

    </LinearLayout>
<!--第二部分写抽屉  记得写属性 android:layout_gravity="left"-->
    <LinearLayout
        android:layout_gravity="left"
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:background="#00BCD4"
        android:orientation="vertical">

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/but1"
            android:text="111"></Button>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/but2"
           android:text="222"></Button>
    </LinearLayout>

</androidx.drawerlayout.widget.DrawerLayout>

DrawerLayout抽屉代码

//点击打开抽屉
open.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        drawer.openDrawer(Gravity.LEFT);
    }
});
//吐司后关闭抽屉
but1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "111", Toast.LENGTH_SHORT).show();
        drawer.closeDrawer(Gravity.LEFT);
        vp.setCurrentItem(0);
    }
});

slidingMenu抽屉 //先导手动包

open.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //显示抽屉
        slidingMenu.showMenu();
    }
});
//创建对象
slidingMenu= new SlidingMenu(this);

slidingMenu.setMode(SlidingMenu.LEFT);//方向
slidingMenu.setBehindOffset(100);//剩余宽度

//布局填充器
View inflate = LayoutInflater.from(this).inflate(R.layout.slide_menu, null);

Button bt1 = (Button) inflate.findViewById(R.id.bt1);
Button bt2 = (Button) inflate.findViewById(R.id.bt2);
bt1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(Main2Activity.this, "111", Toast.LENGTH_SHORT).show();
        //返回主界面
        slidingMenu.showContent();
    }
});
slidingMenu.setMenu(inflate); //添加布局
//绑定布局
slidingMenu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);

//slidingMenu其他属性
slidingMenu.setFadeEnabled(true);//可以淡入淡出
slidingMenu.setFadeDegree(1.0f);//效果程度
//阴影
slidingMenu.setShadowWidth(100);//阴影大小
slidingMenu.setSelectorDrawable(R.drawable.ic_launcher_background);//阴影填充
//触摸方式  TOUCHMODE_FULLSCREEN: 全屏 
  TOUCHMODE_MARGIN: 边界    
TOUCHMODE_NONE:不添加滑动
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

Toolbar各种使用方法

<androidx.appcompat.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="50dp"
//图
    app:navigationIcon="@mipmap/ic_launcher"
//logo
    app:logo="@mipmap/ic_launcher"
    app:title="标题"
    app:subtitle="小标题"
    app:titleTextColor="@color/colorPrimary"
    app:subtitleTextColor="@color/colorPrimary"
    android:id="@+id/toolbar"/>
//一直显示在toolbar
<item android:id="@+id/a" android:title="" android:icon="@mipmap/ic_launcher" app:showAsAction="always"></item>
<item android:id="@+id/b" android:title="" android:icon="@mipmap/ic_launcher" app:showAsAction="always"></item>
<item android:id="@+id/c" android:title="点我" app:showAsAction="always"></item>
<item android:id="@+id/zero" android:title="item0" ></item>
<item android:id="@+id/one" android:title="item1" ></item>
<item android:id="@+id/two" android:title="item2" ></item>
//添加布局
toolbar.inflateMenu(R.menu.menu);
//判断
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.a:
                Toast.makeText(Main3Activity.this, "a", Toast.LENGTH_SHORT).show();
                //改变标题
                toolbar.setTitle("新标题");
                break;


打电话,浏览器,图库更换头像,打开照相机,录制视频,截图,蓝牙

打电话

//打电话
public void call(View view) {
    Intent intent = new Intent();
    //添加字段
    intent.setAction(Intent.ACTION_CALL);
    //添加url
    intent.setData(Uri.parse("tel:" + "15150790762"));
    startActivity(intent);
}

浏览器

//浏览器
public void browser(View view) {
    Intent intent = new Intent();
//添加字段
    intent.setAction(Intent.ACTION_VIEW);
//添加url
    intent.setData(Uri.parse("http://www.yhdm.io/"));
    startActivity(intent);
}

图库

//图库
public void pick(View view) {
    Intent intent = new Intent();
//添加字段
    intent.setAction(Intent.ACTION_PICK);
//添加过滤
    intent.setType("image/*");
    startActivityForResult(intent,102);
}

//图库获取uri显示图片
Uri uri = data.getData();
Glide.with(MainActivity.this).load(uri).into(iv);

摄像机

//摄像机
public void video(View view) {
    Intent intent = new Intent();
//添加字段
    intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
    startActivityForResult(intent, 100);
}
//获取uri播放视频
Uri uri = data.getData();
vv.setVideoURI(uri);
vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        vv.start();
    }
});

照相机

private String path ;
//照相机
public void camera(View view) {
//保存路径
    path = "/sdcard/DCIM/Camera/"+tim();
    Intent intent = new Intent();
//添加字段
    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//FileProvider获取uri
    Uri uri = FileProvider.getUriForFile(MainActivity.this, "com.example.day010", new File(path));
/put添加uri   MediaStore.EXTRA_OUTPUT
    intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
    startActivityForResult(intent,103);

//相机获取uri显示图片
Glide.with(MainActivity.this).load(path).into(iv);

截图

//截图
public void jietu(View view) throws FileNotFoundException {
    //获取当前View
    View decorView = getWindow().getDecorView();
    //设置可以缓存
    decorView.setDrawingCacheEnabled(true);
    //构建一次缓存
    decorView.buildDrawingCache(true);
    //获得缓存的图片并显示在ImageView中
    Bitmap bitmap = decorView.getDrawingCache();
    iv.setImageBitmap(bitmap);
    //图片保存到SD卡中
  
    //参数一图片格式PNG/JPEG/WEBP        参数二压缩质量0-100         参数三SD卡输出流
    bitmap.compress(Bitmap.CompressFormat.PNG,100,new FileOutputStream("/sdcard/DCIM/Camera/jt.jpg"));
}

视频和画图

SurfaceView画画

 //创建笔
        Paint paint = new Paint();
        //抗锯齿
        paint.setAntiAlias(true);
        //设置颜色
        paint.setColor(Color.GREEN);
        //设置粗细
        paint.setStrokeWidth(20);
        //设置字体大小
        paint.setTextSize(40);
        //设置笔的类型
        paint.setStyle(Paint.Style.STROKE);

        //生成画布,并锁定
        Canvas canvas = holder.lockCanvas();
        canvas.drawColor(Color.WHITE);
        //点
        canvas.drawPoint(500,100,paint);
        //线
        canvas.drawLine(100,100,400,500,paint);
        //正圆
//        canvas.drawCircle(300,600,200,paint);
        //文字
        canvas.drawText("hahah",400,400,paint);
        //图片
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        canvas.drawBitmap(bitmap,500,700,paint);
        //椭圆
//        canvas.drawOval(100,400,500,100,paint);
        //矩形
//        canvas.drawRect(100,400,500,100,paint);
        //扇形
        // float startAngle: 起始弧度, float sweepAngle: 扫描弧度, boolean useCenter 是否链接中心点,@NonNull Paint paint 画笔
        paint.setColor(Color.RED);
//        canvas.drawArc(100,400,500,800,0,30,true,paint);
        //弧度
        canvas.drawArc(100,400,500,800,0,30,false,paint);
        //解锁画布
        holder.unlockCanvasAndPost(canvas);

继承 SurfaceView实现播放的类


//继承 SurfaceView  实现SurfaceHolder.Callback
public class Myspview extends SurfaceView implements SurfaceHolder.Callback {
    private MediaPlayer mediaPlayer;

    //播放
    public void setData(String path){
        mediaPlayer.reset();
        try {
            mediaPlayer.setDataSource(path);
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public Myspview(Context context) {
        super(context);
        getHolder().addCallback(this);
        if (mediaPlayer==null){
            mediaPlayer= new MediaPlayer();
        }
    }

    public Myspview(Context context, AttributeSet attrs) {
        super(context, attrs);
        getHolder().addCallback(this);
        if (mediaPlayer==null){
            mediaPlayer= new MediaPlayer();
        }
    }

    public Myspview(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public Myspview(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        //连接音频
        mediaPlayer.setDisplay(holder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

    //开始暂停
    public void start(){
        if (mediaPlayer!=null){
            if (mediaPlayer.isPlaying()){
                mediaPlayer.pause();
            }else{
                mediaPlayer.start();
            }
        }
    }

    //快进
    public void quick(){
        if (mediaPlayer!=null){
            int currentPosition = mediaPlayer.getCurrentPosition();
            currentPosition+=3000;
            mediaPlayer.seekTo(currentPosition);
        }
    }

    //快退
    public void tui(){
        if (mediaPlayer!=null){
            int currentPosition = mediaPlayer.getCurrentPosition();
            currentPosition-=3000;
            mediaPlayer.seekTo(currentPosition);
        }
    }

    //倍速
    public void bei(float speed){
        if (mediaPlayer!=null){
            PlaybackParams playbackParams = mediaPlayer.getPlaybackParams();
            playbackParams.setSpeed(speed);
            mediaPlayer.setPlaybackParams(playbackParams);
        }
    }

    //最大进度
    public int getDuration(){
        if (mediaPlayer!=null){
            int duration = mediaPlayer.getDuration();
            return duration;
        }
        return 0;
    }


    //当前进度
    public int getCurrent(){
        if (mediaPlayer!=null){
            int duration = mediaPlayer.getCurrentPosition();
            return duration;
        }
        return 0;
    }


    //最大数字
    public String getMax(){
        if (mediaPlayer!=null){
            int r = mediaPlayer.getDuration();
            int fen=r/1000/60;
            int miao=r/1000%60;

            String str="";

            if (fen<10){
                str+="0"+fen+":";
            }else{
                str+=fen+":";
            }


            if (miao<10){
                str+="0"+miao;
            }else{
                str+=miao;
            }

            return str;
        }

        return "00:00";
    }

    //最大数字
    public String getCur(){
        if (mediaPlayer!=null){
            int r = mediaPlayer.getCurrentPosition();
            int fen=r/1000/60;
            int miao=r/1000%60;

            String str="";

            if (fen<10){
                str+="0"+fen+":";
            }else{
                str+=fen+":";
            }


            if (miao<10){
                str+="0"+miao;
            }else{
                str+=miao;
            }

            return str;
        }

        return "00:00";
    }

调用播放视频

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

    mv.setData("http://vfx.mtime.cn/Video/2019/03/19/mp4/190319104618910544.mp4");

    if (timer != null) {
        timer.cancel();
    }
    timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //进度条
                    bar.setMax(mv.getDuration());
                    bar.setProgress(mv.getCurrent());
                    //时间
                    tvCurrent.setText(mv.getCur());
                    tvDuration.setText(mv.getMax());
                }
            });
        }
    }, 0, 100);
}

private void initView() {
    mv = (Myspview) findViewById(R.id.mv);
    bar = (SeekBar) findViewById(R.id.bar);
    tvCurrent = (TextView) findViewById(R.id.tv_current);
    tvDuration = (TextView) findViewById(R.id.tv_duration);
    rl = (RelativeLayout) findViewById(R.id.rl);
}

//开始暂停
public void start(View view) {
    mv.start();
}

//快进
public void quick(View view) {
    mv.quick();
}

//快退
public void tui(View view) {
    mv.tui();
}

//倍数
public void bei(View view) {
    mv.bei(2.5f);
}

//全屏
public void full(View view) {
    //获得高宽
    int width = getWindow().getDecorView().getWidth();
    int height = getWindow().getDecorView().getHeight();
    //判断横竖
    if (height > width) {
        //变成横
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        //修改高度
        ViewGroup.LayoutParams layoutParams = rl.getLayoutParams();
        layoutParams.height=ViewGroup.LayoutParams.MATCH_PARENT;
        rl.setLayoutParams(layoutParams);

    } else {
        //变成竖
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        //修改高度
        ViewGroup.LayoutParams layoutParams = rl.getLayoutParams();
        layoutParams.height=900;
        rl.setLayoutParams(layoutParams);
    }

}

高德地图

网址:https://lbs.amap.com/api/android-sdk/guide/create-map/show-map

public class MainActivity extends AppCompatActivity {

    MapView mMapView = null;
    AMap aMap;

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

        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            requestPermissions(new String[]{
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.ACCESS_NETWORK_STATE,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_WIFI_STATE,
                    Manifest.permission.ACCESS_FINE_LOCATION,
            },1000);
        }


        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
        mMapView.onCreate(savedInstanceState);

        if (aMap == null) {
            aMap = mMapView.getMap();
        }


    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }

    public void weixing(View view) {
        aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 设置卫星地图模式,aMap是地图控制器对象。
    }

    public void putong(View view) {
        aMap.setMapType(AMap.MAP_TYPE_NORMAL); //普通地图
    }

    public void lukuang(View view) {
        aMap.setTrafficEnabled(true);//显示实时路况图层,aMap是地图控制器对象。
    }

    public void yejing(View view) {
        aMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜景地图,aMap是地图控制器对象。
    }

    public void blue(View view) {//蓝点
        MyLocationStyle myLocationStyle;
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
        myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
//        myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));//自定义蓝点
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        //aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
    }

    public void weidu(View view) {
        //获取自己的位置
        Location myLocation = aMap.getMyLocation();
        if (myLocation!=null){
            //经度纬度
            double latitude = myLocation.getLatitude();
            double longitude = myLocation.getLongitude();
            Toast.makeText(this, latitude+":"+longitude, Toast.LENGTH_SHORT).show();
        }
    }

    public void dian(View view) {//点
        LatLng latLng = new LatLng(39.906901,116.397972);
        MarkerOptions icon = new MarkerOptions()
                .position(latLng)
                .title("北京")
                .snippet("DefaultMarker");
//                .icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));//自定义图标
        final Marker marker = aMap.addMarker(icon);
    }

    public void xian(View view) {//线
        List<LatLng> latLngs = new ArrayList<LatLng>();
        latLngs.add(new LatLng(39.999391,116.135972));
        latLngs.add(new LatLng(39.898323,116.057694));
        latLngs.add(new LatLng(39.900430,116.265061));
        latLngs.add(new LatLng(39.955192,116.140092));

        aMap.addPolyline(new PolylineOptions().
                addAll(latLngs)
                .width(10)//线的宽度
                .color(Color.argb(255, 1, 1, 1)));//线的颜色

    }

    public void mian(View view) {//面
        LatLng latLng = new LatLng(39.984059,116.307771);
        aMap.addCircle(new CircleOptions().
                center(latLng).//中心
                radius(1000).//半径
                fillColor(Color.RED).//填充颜色
                strokeColor(Color.GREEN).//边的颜色
                strokeWidth(15));//边的宽度
    }
}

public void shuosuo(View view) {//搜索自己的位置
        PoiSearch.Query  query = new PoiSearch.Query("定陶", "", "");
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
        query.setPageSize(10);// 设置每页最多返回多少条poiitem
        query.setPageNum(1);//设置查询页码


        PoiSearch poiSearch = new PoiSearch(this, query);
        poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
            @Override
            public void onPoiSearched(PoiResult poiResult, int i) {
                if (poiResult!=null&&i==1000){
                    ArrayList<PoiItem> pois = poiResult.getPois();
                    for (PoiItem poiItem : pois) {
                        LatLng latLng = new LatLng(poiItem.getLatLonPoint().getLatitude(),poiItem.getLatLonPoint().getLongitude());
                        Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title(poiItem.getTitle()).snippet(poiItem.getSnippet()));
                    }
                }
            }
            @Override
            public void onPoiItemSearched(PoiItem poiItem, int i) {

            }
        });

        poiSearch.searchPOIAsyn();
    }
//路线规划
if (driveRouteResult!=null&&i==1000){
    List<DrivePath> paths = driveRouteResult.getPaths();
    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(getActivity(),aMap,paths.get(0),start,end,null);
    drivingRouteOverlay.addToMap();
    drivingRouteOverlay.zoomToSpan();
}

腾讯云直播

推流

        TXLivePushConfig mLivePushConfig = new TXLivePushConfig();
        mLivePusher = new TXLivePusher(this);

        Bitmap waterBmp = BitmapFactory.decodeResource(getResources(), R.drawable.log);
        mLivePushConfig.setWatermark(waterBmp, 0.1f, 0.1f, 0.1f);

// 一般情况下不需要修改 config 的默认配置
        mLivePusher.setConfig(mLivePushConfig);

        mLivePusher.setBeautyFilter(1,9,9,9);

        //启动本地摄像头预览
        TXCloudVideoView mPusherView = (TXCloudVideoView) findViewById(R.id.pusher_tx_cloud_view);
        mLivePusher.startCameraPreview(mPusherView);


        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String rtmpURL = "rtmp://3891.livepush.myqcloud.com/live/3891_user_a1c38520_c82c?bizid=3891&txSecret=96cccbd647790cd8c33f6af3a0d05ce9&txTime=5FE14E4A"; //此处填写您的 rtmp 推流地址
                int ret = mLivePusher.startPusher(rtmpURL.trim());
                if (ret == -5) {
                    Log.i("wp", "startRTMPPush: license 校验失败");
                }else{
                    Log.i("wp", "startRTMPPush: license 校验成功");
                }
            }
        });

        open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mLivePusher.stopPusher();
                mLivePusher.stopCameraPreview(true); //如果已经启动了摄像头预览,请在结束推流时将其关闭。
            }
        });
public class MApplication extends Application {

    初始化
    public void onCreate() {
        super.onCreate();
        String licenceURL = "http://license.vod2.myqcloud.com/license/v1/cf24891926efa0eabb069bc15cef231d/TXLiveSDK.licence"; // 获取到的 licence url
        String licenceKey = "da1b21df0938845b6a42cc676b53fb09"; // 获取到的 licence key
        TXLiveBase.getInstance().setLicence(this, licenceURL, licenceKey);
    }
}

拉流

 //创建 player 对象
        final TXLivePlayer mLivePlayer = new TXLivePlayer(this);
        //关键 player 对象与界面 view
        mLivePlayer.setPlayerView(videoView);


        // 设置填充模式
        mLivePlayer.setRenderMode(TXLiveConstants.RENDER_MODE_ADJUST_RESOLUTION);
// 设置画面渲染方向
        mLivePlayer.setRenderRotation(TXLiveConstants.RENDER_ROTATION_LANDSCAPE);

        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String flvUrl = "http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8";
                mLivePlayer.startPlay(flvUrl, TXLivePlayer.PLAY_TYPE_VOD_HLS); //推荐 FLV
            }
        });

        open.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mLivePlayer.stopPlay(true); // true 代表清除最后一帧画面
                videoView.onDestroy();
            }
        });


Webview

   bar.setMax(100);
    //加载网页
    web.loadUrl("https://www.baidu.com/");
    //本地加载
    web.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return super.shouldOverrideUrlLoading(view, url);
        }
    });
    //进度条
    web.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            bar.setProgress(newProgress);
            if (newProgress==100){
                bar.setVisibility(View.GONE);
            }
        }
    });

    //常用设置
    WebSettings settings = web.getSettings();
    settings.setJavaScriptCanOpenWindowsAutomatically(true);
    settings.setJavaScriptEnabled(true);;//允许和js交互
    //屏幕自适应
    settings.setUseWideViewPort(true);
    settings.setLoadWithOverviewMode(true);
    settings.setSupportZoom(true);//支持缩放
    settings.setAllowFileAccess(true);//允许访问文件

}


//返回上一个页面
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode==KeyEvent.KEYCODE_BACK){
        if (web.canGoBack()){
            web.goBack();
            return  false;
        }
    }
    return super.onKeyDown(keyCode, event);

}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (web!=null){
        web.clearHistory();//历史记录
        web.clearFormData();//提交数据
        web.clearCache(true);//缓存
        web.clearSslPreferences();//sp存储
        web.destroy();//销毁
        web=null;//GC垃圾自动回收
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2023-07-18 09:20:08.549 ERROR 5944 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController': Unsatisfied dependency expressed through field 'service'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl' defined in file [D:\专高二代码\day2-zy\target\classes\com\bwie\service\impl\UserServiceImpl.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Encountered invalid @Scheduled method 'login': Only no-arg methods may be annotated with @Scheduled at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1425) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE] at org.springf
最新发布
07-20

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值