okhttp封装工具类
一.封装okhttp工具
将okhttp的相同代码进行封装,简化代码,便捷使用
public class MyokHttpUtils {
private OkHttpClient client;
private static MyokHttpUtils myokHttpUtils = new MyokHttpUtils();
private MyokHttpUtils() {
client = new OkHttpClient.Builder()
.connectTimeout(60 * 1000, TimeUnit.SECONDS)//连接超时时间
.readTimeout(60 * 1000, TimeUnit.SECONDS)//读取超时时间
.writeTimeout(60 * 1000, TimeUnit.SECONDS)//写入超时时间
.build();
}
private Handler handler = new Handler();
public static MyokHttpUtils getInstance() {
if (myokHttpUtils == null) {
myokHttpUtils = new MyokHttpUtils();
}
return myokHttpUtils;
}
}
因为只需要一个Client对象即可,所以在构造时创建Client对象,往后的方法直接调用这个对象
之后声明成员变量Handler,方便在主线程中吐司,更新UI等操作
在Activity中获取数据,用接口回调的方式
创建一个接口,用来获取请求到的数据
public interface MyokHttpCallBack {
public void onError(String message);
public void onOk(String json);
}
二.封装方法
1.get请求
public void doGet(String url, final MyokHttpCallBack myokHttpCallBack) {
Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json);
}
});
}
}
});
}
Activity中调用
private String Url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
private void doGet() {
httpUtils = MyokHttpUtils.getInstance();
httpUtils.doGet(Url, new MyokHttpCallBack() {
@Override
public void onError(String message) {
Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json) {
Toast.makeText(MainActivity.this, ""+json, Toast.LENGTH_SHORT).show();
}
});
}
2.form_post请求
public void doPost(String Url, HashMap<String, String> map, final MyokHttpCallBack myokHttpCallBack) {
FormBody.Builder builder = new FormBody.Builder();
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entrie : entries) {
builder.add(entrie.getKey(), entrie.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder()
.url(Url)
.post(formBody)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json);
}
});
}
}
});
}
Activity中调用
private String Url_login = "https://www.wanandroid.com/user/login";
private void doPost_login() {
httpUtils = MyokHttpUtils.getInstance();
HashMap<String, String> map = new HashMap<>();
map.put("username","xiabei");
map.put("password","123456");
httpUtils.doPost(Url_login, map, new MyokHttpCallBack() {
@Override
public void onError(String message) {
Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json) {
Toast.makeText(MainActivity.this, ""+json, Toast.LENGTH_SHORT).show();
}
});
}
3.json_post请求
public void doPost(String Url, String s, final MyokHttpCallBack myokHttpCallBack) {
RequestBody body = RequestBody.create(MediaType.parse("application/json"), s);
Request request = new Request.Builder()
.url(Url)
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json);
}
});
}
}
});
}
Activity中调用
private String Url_video = "http://172.81.227.127:8055/videovalues/selrecommendvideos";
private void doPost_video() {
httpUtils = MyokHttpUtils.getInstance();
HashMap<String, String> map = new HashMap<>();
map.put("page","0");
map.put("userId","0");
String s = new Gson().toJson(map);
httpUtils.doPost(Url_video, s, new MyokHttpCallBack() {
@Override
public void onError(String message) {
Toast.makeText(MainActivity.this, ""+message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json) {
Toast.makeText(MainActivity.this, ""+json, Toast.LENGTH_SHORT).show();
}
});
}
4.get_网络下载
public void doDownload(String url, final String file_path, final MyokHttpFileCallBack myokHttpFileCallBack) {
Request request = new Request.Builder()
.url("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4")//请求地址
.get()//请求方式
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {//请求失败
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onError(message);
}
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {//请求成功
InputStream is = response.body().byteStream();//将response转化为输入流
FileOutputStream fos = new FileOutputStream(file_path);
byte[] bys = new byte[1024];
int len = 0;
int count = 0;//记录下载的总量
long l = response.body().contentLength();//获取需要下载的总量
while ((len = is.read(bys)) != -1) {
fos.write(bys, 0, len);
count += len;
final int progress = (int) (count * 100 / l);//获取百分比
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onPrograss(progress);
}
}
});
}
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onOk("下载完成");
}
}
});
}
});
}
Activity中调用
private String Url_download = "http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";
private void doGet_downLoad() {
httpUtils = MyokHttpUtils.getInstance();
httpUtils.doDownload(Url_download, "/sdcard/Download/houzi.mp4", new MyokHttpFileCallBack() {
@Override
public void onError(String message) {
Toast.makeText(MainActivity.this, "" + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json) {
Toast.makeText(MainActivity.this, "" + json, Toast.LENGTH_SHORT).show();
}
@Override
public void onPrograss(int prograss) {
pb.setProgress(prograss);
}
});
}
5.Interceptor拦截器
在创建Client时添加拦截器,就可以log中看到实现过程
首先要添加拦截器的依赖
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'// log拦截器依赖
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.connectTimeout(60 * 1000, TimeUnit.SECONDS)//连接超时时间
.readTimeout(60 * 1000, TimeUnit.SECONDS)//读取超时时间
.writeTimeout(60 * 1000, TimeUnit.SECONDS)//写入超时时间
.addInterceptor(httpLoggingInterceptor)
.build();
三.MVC模式
在原有的基础上改变为MVC模式
M为Model在这层请求网络数据等,
V为View视图,
C为Controller控制
首先要创建Model,以及其实现类,在实现类中调用工具类中的方法
get获取Json的model
public interface JsonModel {
void getJson(MyokHttpCallBack myokHttpCallBack);
}
public class JsonModelImpl implements JsonModel {
private String Url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
@Override
public void getJson(MyokHttpCallBack myokHttpCallBack) {
MyokHttpUtils httpUtils = MyokHttpUtils.getInstance();
httpUtils.doGet(Url, myokHttpCallBack);
}
}
post获取User的Model
public interface UserModel {
void login(String username, String password, MyokHttpCallBack myokHttpCallBack);
}
public class UserModelImpl implements UserModel {
private String Url_login = "https://www.wanandroid.com/user/login";
@Override
public void login(String username, String password, MyokHttpCallBack myokHttpCallBack) {
MyokHttpUtils httpUtils = MyokHttpUtils.getInstance();
HashMap<String, String> map = new HashMap<>();
map.put("username", username);
map.put("password", password);
httpUtils.doPost(Url_login, map, myokHttpCallBack);
}
}
post获取短视频列表的Model
public interface VideoModel {
void getVideo(String json, MyokHttpCallBack myokHttpCallBack);
}
public class VideoModelImpl implements VideoModel {
private String Url_video = "http://172.81.227.127:8055/videovalues/selrecommendvideos";
@Override
public void getVideo(String json, MyokHttpCallBack myokHttpCallBack) {
MyokHttpUtils httpUtils = MyokHttpUtils.getInstance();
httpUtils.doPost(Url_video, json, myokHttpCallBack);
}
}
在原有的callback接口的onOk方法添加一个参数,用来分辨是哪一种请求
public interface MyokHttpCallBack {
public void onError(String message);
public void onOk(String json,int Type);
}
自定义的常量标识
public class OnOkCallBackFinal {
public static int JSON = 1;
public static int USER_LOGIN = 2;
public static int VIDEO_GET = 3;
}
最终完全的工具类
public class MyokHttpUtils {
private OkHttpClient client;
private static MyokHttpUtils myokHttpUtils = new MyokHttpUtils();
private MyokHttpUtils() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.connectTimeout(60 * 1000, TimeUnit.SECONDS)//连接超时时间
.readTimeout(60 * 1000, TimeUnit.SECONDS)//读取超时时间
.writeTimeout(60 * 1000, TimeUnit.SECONDS)//写入超时时间
.addInterceptor(httpLoggingInterceptor)
.build();
}
private Handler handler = new Handler();
public static MyokHttpUtils getInstance() {
if (myokHttpUtils == null) {
myokHttpUtils = new MyokHttpUtils();
}
return myokHttpUtils;
}
public void doGet(String url, final MyokHttpCallBack myokHttpCallBack) {
Request request = new Request.Builder()
.url(url)
.get()
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json, OnOkCallBackFinal.JSON);
}
});
}
}
});
}
public void doPost(String Url, HashMap<String, String> map, final MyokHttpCallBack myokHttpCallBack) {
FormBody.Builder builder = new FormBody.Builder();
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entrie : entries) {
builder.add(entrie.getKey(), entrie.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder()
.url(Url)
.post(formBody)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json,OnOkCallBackFinal.USER_LOGIN);
}
});
}
}
});
}
public void doPost(String Url, String s, final MyokHttpCallBack myokHttpCallBack) {
RequestBody body = RequestBody.create(MediaType.parse("application/json"), s);
Request request = new Request.Builder()
.url(Url)
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json,OnOkCallBackFinal.VIDEO_GET);
}
});
}
}
});
}
public void doDownload(String url, final String file_path, final MyokHttpFileCallBack myokHttpFileCallBack) {
Request request = new Request.Builder()
.url("http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4")//请求地址
.get()//请求方式
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {//请求失败
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onError(message);
}
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {//请求成功
InputStream is = response.body().byteStream();//将response转化为输入流
FileOutputStream fos = new FileOutputStream(file_path);
byte[] bys = new byte[1024];
int len = 0;
int count = 0;//记录下载的总量
long l = response.body().contentLength();//获取需要下载的总量
while ((len = is.read(bys)) != -1) {
fos.write(bys, 0, len);
count += len;
final int progress = (int) (count * 100 / l);//获取百分比
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onPrograss(progress);
}
}
});
}
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onOk("下载完成");
}
}
});
}
});
}
}
及Activity代码
Activity实现了CallBack的结果接口,type用来分辨是哪种请求
public class MainActivity extends AppCompatActivity implements View.OnClickListener, MyokHttpCallBack {
private String Url_download = "http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4";
private MyokHttpUtils httpUtils;
private Button get;
private Button postFormLogin;
private Button postJsonLogin;
private Button butDownload;
private ProgressBar pb;
private JsonModel jsonModel;
private UserModel userModel;
private VideoModel videoModel;
@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.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 101);
}
initViews();
}
private void initViews() {
get = (Button) findViewById(R.id.get);
postFormLogin = (Button) findViewById(R.id.post_form_login);
postJsonLogin = (Button) findViewById(R.id.post_json_login);
butDownload = (Button) findViewById(R.id.but_download);
pb = (ProgressBar) findViewById(R.id.pb);
get.setOnClickListener(this);
postFormLogin.setOnClickListener(this);
postJsonLogin.setOnClickListener(this);
butDownload.setOnClickListener(this);
jsonModel = new JsonModelImpl();
userModel = new UserModelImpl();
videoModel = new VideoModelImpl();
}
private void doGet_downLoad() {
httpUtils = MyokHttpUtils.getInstance();
httpUtils.doDownload(Url_download, "/sdcard/Download/houzi.mp4", new MyokHttpFileCallBack() {
@Override
public void onError(String message) {
Toast.makeText(MainActivity.this, "" + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json) {
Toast.makeText(MainActivity.this, "" + json, Toast.LENGTH_SHORT).show();
}
@Override
public void onPrograss(int prograss) {
pb.setProgress(prograss);
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.get:
jsonModel.getJson(this);
break;
case R.id.but_download:
doGet_downLoad();
break;
case R.id.post_form_login:
userModel.login("xiabei", "123456", this);
break;
case R.id.post_json_login:
HashMap<String, String> map = new HashMap<>();
map.put("page", "0");
map.put("userId", "0");
String s = new Gson().toJson(map);
videoModel.getVideo(s, this);
break;
}
}
@Override
public void onError(String message) {
Toast.makeText(this, "" + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json, int type) {
if (type == OnOkCallBackFinal.JSON) {
Toast.makeText(this, "" + json, Toast.LENGTH_SHORT).show();
} else if (type == OnOkCallBackFinal.USER_LOGIN) {
Toast.makeText(this, "" + json, Toast.LENGTH_SHORT).show();
} else if (type == OnOkCallBackFinal.VIDEO_GET) {
Toast.makeText(this, "" + json, Toast.LENGTH_SHORT).show();
}
}
}
四.小案例
利用MVC模式+okHttpUtils完成
- 实现登陆
- 登陆后获取短视频用列表展示
- 点击item实现跳转播放短视频
- 可下载到本地进度条展示
界面等用的昨天界面不做展示
首先有User和Viedo的model
public interface UserModel {
void login(String username, String password, MyokHttpCallBack myokHttpCallBack);
}
public class UserModelImpl implements UserModel {
private String Url_login = "https://www.wanandroid.com/user/login";
@Override
public void login(String username, String password, MyokHttpCallBack myokHttpCallBack) {
MyokHttpUtils httpUtils = MyokHttpUtils.getInstance();
HashMap<String, String> map = new HashMap<>();
map.put("username", username);
map.put("password", password);
httpUtils.doPost(Url_login, map, myokHttpCallBack);
}
}
public interface VideoModel {
void getVideo(String json, MyokHttpCallBack myokHttpCallBack);
}
public class VideoModelImpl implements VideoModel {
private String Url_video = "http://172.81.227.127:8055/videovalues/selrecommendvideos";
@Override
public void getVideo(String json, MyokHttpCallBack myokHttpCallBack) {
MyokHttpUtils httpUtils = MyokHttpUtils.getInstance();
httpUtils.doPost(Url_video, json, myokHttpCallBack);
}
}
然后是请求成功的回调接口及文件下载的回调接口
public interface MyokHttpCallBack {
public void onError(String message);
public void onOk(String json, int Type);
}
public interface MyokHttpFileCallBack {
public void onError(String message);
public void onOk(String json);
public void onPrograss(int prograss);
}
public class OnOkCallBackFinal {
public static int JSON = 1;
public static int USER_LOGIN = 2;
public static int VIDEO_GET = 3;
}
okhtppUtils类
public class MyokHttpUtils {
private OkHttpClient client;
private static MyokHttpUtils myokHttpUtils = new MyokHttpUtils();
private MyokHttpUtils() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.connectTimeout(60 * 1000, TimeUnit.SECONDS)//连接超时时间
.readTimeout(60 * 1000, TimeUnit.SECONDS)//读取超时时间
.writeTimeout(60 * 1000, TimeUnit.SECONDS)//写入超时时间
.addInterceptor(httpLoggingInterceptor)
.build();
}
private Handler handler = new Handler();
public static MyokHttpUtils getInstance() {
if (myokHttpUtils == null) {
myokHttpUtils = new MyokHttpUtils();
}
return myokHttpUtils;
}
public void doPost(String Url, HashMap<String, String> map, final MyokHttpCallBack myokHttpCallBack) {
FormBody.Builder builder = new FormBody.Builder();
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entrie : entries) {
builder.add(entrie.getKey(), entrie.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder()
.url(Url)
.post(formBody)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json,OnOkCallBackFinal.USER_LOGIN);
}
});
}
}
});
}
public void doPost(String Url, String s, final MyokHttpCallBack myokHttpCallBack) {
RequestBody body = RequestBody.create(MediaType.parse("application/json"),s);
Request request = new Request.Builder()
.url(Url)
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onError(message);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String json = response.body().string();
if (myokHttpCallBack != null) {
handler.post(new Runnable() {
@Override
public void run() {
myokHttpCallBack.onOk(json,OnOkCallBackFinal.VIDEO_GET);
}
});
}
}
});
}
public void doDownload(String url, final String file_path, final MyokHttpFileCallBack myokHttpFileCallBack) {
Request request = new Request.Builder()
.url(url)//请求地址
.get()//请求方式
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {//请求失败
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onError(message);
}
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {//请求成功
InputStream is = response.body().byteStream();//将response转化为输入流
FileOutputStream fos = new FileOutputStream(file_path);
byte[] bys = new byte[1024];
int len = 0;
int count = 0;//记录下载的总量
long l = response.body().contentLength();//获取需要下载的总量
while ((len = is.read(bys)) != -1) {
fos.write(bys, 0, len);
count += len;
final int progress = (int) (count * 100 / l);//获取百分比
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onPrograss(progress);
}
}
});
}
handler.post(new Runnable() {
@Override
public void run() {
if (myokHttpFileCallBack != null) {
myokHttpFileCallBack.onOk("下载完成");
}
}
});
}
});
}
}
登陆的Activity
public class LoginActivity extends AppCompatActivity {
private EditText etUsername;
private EditText etPassword;
private Button butLogin;
private UserModel userModel;
private String login_url = "https://www.wanandroid.com/user/login";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
initViews();
}
private void initViews() {
etUsername = (EditText) findViewById(R.id.et_username);
etPassword = (EditText) findViewById(R.id.et_password);
butLogin = (Button) findViewById(R.id.but_login);
userModel = new UserModelImpl();
butLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userModel.login(etUsername.getText().toString(), etPassword.getText().toString(), new MyokHttpCallBack() {
@Override
public void onError(String message) {
Toast.makeText(LoginActivity.this, "" + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json, int Type) {
if (json.indexOf("0") != -1) {
Toast.makeText(LoginActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, VideoActivity.class));
} else {
Toast.makeText(LoginActivity.this, "登陆失败,用户名或密码不正确", Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
}
获取短视频的Activity
public class VideoActivity extends AppCompatActivity {
private GridView gvShow;
private Handler handler = new Handler();
private List<VideoEntity> datas = new ArrayList<>();
private MyAdapter myAdapter;
private VideoModel videoModel;
private String url_video = "http://172.81.227.127:8055/videovalues/selrecommendvideos";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_video);
initViews();
initDatas();
}
private void initDatas() {
OkHttpClient client = new OkHttpClient.Builder().build();
HashMap<String, String> map = new HashMap<>();
map.put("page", "0");
map.put("userId", "0");
final String s = new Gson().toJson(map);
videoModel.getVideo(s, new MyokHttpCallBack() {
@Override
public void onError(String message) {
Toast.makeText(VideoActivity.this, "请求失败" + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json, int Type) {
final List<VideoEntity> list = new Gson().fromJson(json, new TypeToken<ArrayList<VideoEntity>>() {
}.getType());
datas.addAll(list);
handler.post(new Runnable() {
@Override
public void run() {
myAdapter.notifyDataSetChanged();
}
});
}
});
}
private void initViews() {
gvShow = (GridView) findViewById(R.id.gv_show);
myAdapter = new MyAdapter(datas, this);
gvShow.setAdapter(myAdapter);
videoModel = new VideoModelImpl();
gvShow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(VideoActivity.this, PlayActivity.class);
intent.putExtra("Url", datas.get(position).getVedioUrl());
startActivity(intent);
}
});
}
}
最后播放及下载的Activity
public class PlayActivity extends AppCompatActivity {
private VideoView vv;
private Button butDown;
private String Url;
private int index = 0;
private ProgressBar pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_play);
requestPermissions(new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
}, 101);
initDatas();
initViews();
}
private void initDatas() {
Url = getIntent().getStringExtra("Url");
}
private void initViews() {
vv = (VideoView) findViewById(R.id.vv);
butDown = (Button) findViewById(R.id.but_down);
pb = (ProgressBar) findViewById(R.id.pb);
vv.setVideoPath(Url);
vv.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
vv.start();
}
});
butDown.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getMp4();
}
});
}
private void getMp4() {
MyokHttpUtils utils = MyokHttpUtils.getInstance();
utils.doDownload(Url, "/sdcard/Download/video" + (index++) + ".mp4", new MyokHttpFileCallBack() {
@Override
public void onError(String message) {
Toast.makeText(PlayActivity.this, "" + message, Toast.LENGTH_SHORT).show();
}
@Override
public void onOk(String json) {
Toast.makeText(PlayActivity.this, "" + json, Toast.LENGTH_SHORT).show();
}
@Override
public void onPrograss(int prograss) {
pb.setProgress(prograss);
}
});
}
}
要开心加油