更换成OkHttp3网络库

This commit is contained in:
Yutousama 2021-12-14 11:30:43 +08:00
parent 643c51b2ff
commit aedda7b297
4 changed files with 394 additions and 38 deletions

View File

@ -77,4 +77,6 @@ dependencies {
implementation "androidx.room:room-runtime:2.2.6"
annotationProcessor "androidx.room:room-compiler:2.2.6"
implementation("com.squareup.okhttp3:okhttp:4.9.3")
}

View File

@ -12,6 +12,7 @@ import com.yutou.nas_music_player.Interfaces.DownloadInterface;
import com.yutou.nas_music_player.Interfaces.NetworkInterface;
import com.yutou.nas_music_player.MyApplication;
import com.yutou.nas_music_player.R;
import com.yutou.nas_music_player.network.HttpManager;
import com.yutou.nas_music_player.tools.AppData;
import com.yutou.nas_music_player.tools.AppTools;
import com.yutou.nas_music_player.tools.NetworkTool;
@ -222,15 +223,15 @@ public class MusicData {
public String getPlayUrl() {
System.out.println("播放地址:" + NetworkTool.NetworkAPI.HOME + NetworkTool.NetworkAPI.MUSIC_PLAY
+ "?random=false&token=" + NetworkTool.NetworkAPI.HTTP_KEY + "&filePath=" + getFileBase64());
return NetworkTool.NetworkAPI.HOME + NetworkTool.NetworkAPI.MUSIC_PLAY
+ "?random=false&token=" + NetworkTool.NetworkAPI.HTTP_KEY + "&filePath=" + getFileBase64();
System.out.println("播放地址:" + HttpManager.NetworkAPI.HOME + HttpManager.NetworkAPI.MUSIC_PLAY
+ "?random=false&token=" + HttpManager.NetworkAPI.HTTP_KEY + "&filePath=" + getFileBase64());
return HttpManager.NetworkAPI.HOME + HttpManager.NetworkAPI.MUSIC_PLAY
+ "?random=false&token=" + HttpManager.NetworkAPI.HTTP_KEY + "&filePath=" + getFileBase64();
}
public String getImageUrl() {
return NetworkTool.NetworkAPI.MUSIC_IMAGE + "?fileName=" + getFileBase64();
return HttpManager.NetworkAPI.MUSIC_IMAGE + "?fileName=" + getFileBase64();
}
public Bitmap getImg() {
@ -280,8 +281,8 @@ public class MusicData {
json.put("fileName", AppTools.getUrlBase64(getAlbum()));
json.put("type", "album");
}
System.out.println("下载图片:" + NetworkTool.NetworkAPI.MUSIC_IMAGE + "?" + NetworkTool.toGetSplice(json));
NetworkTool.init().downloadImage(NetworkTool.NetworkAPI.MUSIC_IMAGE, json, imageSaveName, "post", new DownloadInterface() {
System.out.println("下载图片:" + HttpManager.NetworkAPI.MUSIC_IMAGE + "?" + NetworkTool.toGetSplice(json));
HttpManager.getInstance().downloadImage(HttpManager.NetworkAPI.MUSIC_IMAGE, json, imageSaveName, "post", new DownloadInterface() {
@Override
public void onDownloadOver(File oldJar) {
AppTools.saveBitmap(oldJar, imageSaveName);
@ -304,7 +305,7 @@ public class MusicData {
img = BitmapFactory.decodeResource(MyApplication.application.getResources(), R.mipmap.ic_launcher);
}
});
/* NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_IMAGE, json, new NetworkInterface() {
/* HttpManager.getInstance().httpGet(HttpManager.NetworkAPI.MUSIC_IMAGE, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject(data.toString());

View File

@ -6,6 +6,8 @@ import android.content.Context;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.media.MediaMetadataCompat;
import android.widget.EditText;
import android.widget.Toast;
@ -18,6 +20,7 @@ import com.yutou.nas_music_player.Datas.MusicData;
import com.yutou.nas_music_player.Datas.PreviousPlayerList;
import com.yutou.nas_music_player.Interfaces.NetworkInterface;
import com.yutou.nas_music_player.MyApplication;
import com.yutou.nas_music_player.network.HttpManager;
import com.yutou.nas_music_player.tools.AppTools;
import com.yutou.nas_music_player.tools.CollectionTools;
import com.yutou.nas_music_player.tools.ConfigTools;
@ -143,9 +146,9 @@ public class MusicContainer {
public static MusicContainer getInstance(MusicLibsInitInterface initInterface) {
if (container == null) {
container = new MusicContainer(initInterface);
}else{
if(initInterface!=null)
initInterface.init();
} else {
if (initInterface != null)
initInterface.init();
}
return container;
}
@ -162,12 +165,13 @@ public class MusicContainer {
/**
* 随机下一首歌
* @param play 是否直接播放
*
* @param play 是否直接播放
* @param networkInterface 获取完成
*/
private void playOfAllRandom(boolean play,NetworkInterface networkInterface) {
private void playOfAllRandom(boolean play, NetworkInterface networkInterface) {
System.out.println("随机下一首");
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_RANDOM, new JSONObject(), new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_RANDOM, new JSONObject(), new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
@ -179,14 +183,15 @@ public class MusicContainer {
e.printStackTrace();
json.put("path", baseData);
}
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_METADATA, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_METADATA, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
System.err.println(data);
if (json.getInteger("code") == 0) {
nowPlayData = JSONArray.parseObject(json.getString("data"), MusicData.class);
if(networkInterface!=null){
networkInterface.httpGetData(nowPlayData,state);
if (networkInterface != null) {
networkInterface.httpGetData(nowPlayData, state);
}
if (play) {
play(nowPlayData);
@ -197,7 +202,7 @@ public class MusicContainer {
@Override
public void httpError(Exception e) {
if(networkInterface!=null)
if (networkInterface != null)
networkInterface.httpError(e);
}
});
@ -215,7 +220,7 @@ public class MusicContainer {
* 默认直接播放下一首
*/
public void playOfAllRandom() {
playOfAllRandom(true,null);
playOfAllRandom(true, null);
}
public void play(MusicData data) {
@ -250,14 +255,14 @@ public class MusicContainer {
}
}, 0, 1000);
}
MusicData tmp=data.clone();
MusicData tmp = data.clone();
tmp.setImg(null);
ConfigTools.getPreferences().edit().putString(ConfigTools.previous_music, JSONObject.toJSONString(tmp)).apply();
MediaNotificationManager manager=MediaNotificationManager.getInstance();
if(manager!=null){
MediaNotificationManager manager = MediaNotificationManager.getInstance();
if (manager != null) {
manager.getService().updateNotification();
}
tmp=null;
tmp = null;
} catch (IOException e) {
e.printStackTrace();
}
@ -395,10 +400,10 @@ public class MusicContainer {
} else {
playIndex = 0;
}
if(libs.mainData.isEmpty()){
if (libs.mainData.isEmpty()) {
playOfAllRandom();
AppTools.toast("当前播放列表为空,随机播放");
}else {
} else {
play(libs.mainData.get(playIndex));
}
} else {//播放列表中的歌单
@ -459,7 +464,7 @@ public class MusicContainer {
}
public void addTmpList(MusicData data) {
if(data.getTitle().equals("返回")&&data.getTrack().equals("-1")||data.isDir()){
if (data.getTitle().equals("返回") && data.getTrack().equals("-1") || data.isDir()) {
return;
}
tmpList.add(data);
@ -527,7 +532,7 @@ public class MusicContainer {
}
JSONObject json = new JSONObject();
json.put("favorite", editText.getText().toString());
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_Collection_Dir_Add, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_Collection_Dir_Add, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
@ -553,7 +558,7 @@ public class MusicContainer {
JSONObject json = new JSONObject();
json.put("fid", musicData.getId());
json.put("md5s", array);
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_Collection_Add, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_Collection_Add, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
@ -589,15 +594,15 @@ public class MusicContainer {
public void onCollectionList(String collection, NetworkInterface networkInterface) {
JSONObject json = new JSONObject();
String url = NetworkTool.NetworkAPI.MUSIC_Collection_Dir_List;
String url = HttpManager.NetworkAPI.MUSIC_Collection_Dir_List;
if (collection != null) {
url = NetworkTool.NetworkAPI.MUSIC_Collection_Get;
url = HttpManager.NetworkAPI.MUSIC_Collection_Get;
json.put("fid", Integer.parseInt(collection));
}
NetworkTool.init().httpGet(url, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(url, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
if(StringUtil.isEmpty((String)data)){
if (StringUtil.isEmpty((String) data)) {
networkInterface.httpGetData(new ArrayList<>(), 0);
return;
}
@ -617,7 +622,14 @@ public class MusicContainer {
musicData.setDir(false);
list.add(musicData);
}
networkInterface.httpGetData(list, 0);
new Handler(Looper.getMainLooper())
.post(new Runnable() {
@Override
public void run() {
networkInterface.httpGetData(list, 0);
}
});
}
} else {
networkInterface.httpGetData(new ArrayList<>(), 0);
@ -642,7 +654,7 @@ public class MusicContainer {
}
json.put("data", array);
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_Collection_Remove, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_Collection_Remove, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
@ -693,7 +705,7 @@ public class MusicContainer {
} else {
json.put("album", album);
}
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_Album, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_Album, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
@ -708,7 +720,14 @@ public class MusicContainer {
musicData.setAlbum((String) album);
list.add(musicData);
}
networkInterface.httpGetData(list, 0);
new Handler(Looper.getMainLooper())
.post(new Runnable() {
@Override
public void run() {
networkInterface.httpGetData(list, 0);
}
});
}
} else {
networkInterface.httpGetData(new ArrayList<>(), 0);
@ -723,7 +742,7 @@ public class MusicContainer {
}
public void onDirMusicData(JSONObject json, NetworkInterface networkInterface) {
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_LIST, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_LIST, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);
@ -753,7 +772,7 @@ public class MusicContainer {
JSONObject json = new JSONObject();
json.put("path", path);
json.put("type", type);
NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_LIST, json, new NetworkInterface() {
HttpManager.getInstance().httpPost(HttpManager.NetworkAPI.MUSIC_LIST, json, new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data);

View File

@ -0,0 +1,334 @@
package com.yutou.nas_music_player.network;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.yutou.nas_music_player.Interfaces.DownloadInterface;
import com.yutou.nas_music_player.Interfaces.NetworkInterface;
import com.yutou.nas_music_player.MyApplication;
import com.yutou.nas_music_player.tools.AppData;
import com.yutou.nas_music_player.tools.AppTools;
import com.yutou.nas_music_player.tools.Log;
import com.yutou.nas_music_player.tools.NetworkTool;
import com.yutou.nas_music_player.tools.StringUtil;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.Duration;
import java.time.temporal.TemporalUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttp;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class HttpManager {
private static HttpManager manager;
public static String downloadPath = AppData.dir + AppData.download_dir + File.separator;
public static class NetworkAPI {
public static final String HTTP_KEY = "zIrsh9TUZP2lfRW753PannG49E7VJvor";
public static String HOME = "";
public static String MUSIC_LIST = HOME + "/music/list.do";
public static String MUSIC_Album = HOME + "/music/getAlbum.do";
public static String MUSIC_Collection_Dir_List = HOME + "/music/favorite/dir/list.do";
public static String MUSIC_Collection_Dir_Add = HOME + "/music/favorite/dir/add.do";
public static String MUSIC_Collection_Dir_ReName = HOME + "/music/favorite/dir/rename.do";
public static String MUSIC_Collection_Get = HOME + "/music/favorite/get.do";
public static String MUSIC_Collection_Add = HOME + "/music/favorite/add.do";
public static String MUSIC_Collection_Remove = HOME + "/music/favorite/remove.do";
public static String MUSIC_ALL = HOME + "/music/all.do";
public static String MUSIC_METADATA = HOME + "/music/find/file.do";
public static String MUSIC_IMAGE = HOME + "/music/web/image.do";
public static String MUSIC_PLAY = HOME + "/music/play.do";
public static String MUSIC_RANDOM = HOME + "/music/random.do";
}
private HttpManager() {
System.out.println("初始化NetWork");
httpGet("http://192.168.31.88:8000/public/version.do", new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
System.out.println("state = " + state);
if (state == 200) {
NetworkAPI.HOME = "http://192.168.31.88:8000/nas";
AppTools.toast("检测到局域网在线,使用局域网模式");
} else {
toPublicNetWork();
}
}
@Override
public void httpError(Exception e) {
toPublicNetWork();
}
private void toPublicNetWork() {
System.out.println("使用互联网模式");
httpPost("http://tools.yutou233.cn/nas/music/getlocalhost.do?token=" + NetworkAPI.HTTP_KEY, new JSONObject(), new NetworkInterface() {
@Override
public void httpGetData(Object data, int state) {
try {
JSONObject json = JSONObject.parseObject(data.toString());
if (json.getInteger("code") == 0) {
NetworkAPI.HOME = json.getString("data") + "/nas";
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void httpError(Exception e) {
}
});
}
});
}
public static HttpManager getInstance() {
if (manager == null) {
manager = new HttpManager();
}
return manager;
}
public void httpGet(String url, NetworkInterface networkInterface) {
if (StringUtil.isEmpty(url) || !url.startsWith("http")) {
new Timer()
.schedule(new TimerTask() {
@Override
public void run() {
if (!StringUtil.isEmpty(NetworkAPI.HOME)) {
httpGet(NetworkAPI.HOME + url, networkInterface);
} else {
httpGet(url, networkInterface);
}
}
}, 300);
return;
}
OkHttpClient client = getClient();
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
networkInterface.httpError(e);
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
networkInterface.httpGetData(response, response.code());
}
});
}
public void httpPost(String url, JSONObject body, NetworkInterface networkInterface) {
System.out.println("url = " + StringUtil.isEmpty(url) + " starts = " + !url.startsWith("http") + " data = " + url);
if (StringUtil.isEmpty(url) || !url.startsWith("http")) {
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
if (!StringUtil.isEmpty(NetworkAPI.HOME)) {
httpPost(NetworkAPI.HOME + url, body, networkInterface);
} else {
httpPost(url, body, networkInterface);
}
}
}, 300);
return;
}
OkHttpClient client = getClient();
Request request = new Request.Builder()
.url(url)
.post(RequestBody.create(body.toJSONString(), MediaType.parse("application/json; charset=utf-8")))
.build();
client.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
networkInterface.httpError(e);
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
networkInterface.httpGetData(response.body().string(), response.code());
}
});
}
public void download(String url, JSONObject body, String saveName, String method, DownloadInterface downloadInterface) {
OkHttpClient client = getClient();
Request request;
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
if (method.equals("post")) {
requestBuilder.post(RequestBody.create(body.toJSONString(), MediaType.parse("application/json; charset=utf-8")));
}
request = requestBuilder.build();
client.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
downloadInterface.onError(e);
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
File jar = null;
try {
File savePath = new File(downloadPath + saveName + "_tmp.tmp");
if (!savePath.exists()) {
savePath.getParentFile().mkdirs();
}
Log.i("Download", "下载文件:" + url + " 保存文件:" + saveName);
InputStream inputStream = response.body().byteStream();
jar = new File(downloadPath + saveName + "_tmp.tmp");
jar.createNewFile();
Log.i(NetworkTool.class, "临时保存文件:" + jar.getAbsolutePath());
OutputStream outputStream = new FileOutputStream(jar);
byte[] bytes = new byte[1024];
int len;
while ((len = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, len);
}
outputStream.close();
inputStream.close();
File oldJar = new File(downloadPath + saveName);
if (oldJar.exists()) {
oldJar.delete();
}
jar.renameTo(oldJar);
Log.i(NetworkTool.class, "实际保存:" + oldJar.getAbsolutePath() + " " + oldJar.getName());
Log.toast(MyApplication.application, "下载完成,重启生效");
if (downloadInterface != null) {
downloadInterface.onDownloadOver(oldJar);
}
} catch (Exception e) {
e.printStackTrace();
if (downloadInterface != null)
downloadInterface.onError(e);
}
}
});
}
private List<String> downloadImageList = new ArrayList<>();
public synchronized void downloadImage(String url, JSONObject body, String saveName, String method, DownloadInterface downloadInterface) {
if (!StringUtil.isEmpty(NetworkAPI.HOME) && !url.startsWith("http")) {
downloadImage(NetworkAPI.HOME + url, body, saveName, method, downloadInterface);
return;
}
if (downloadImageList.contains(url + "?" + body.toJSONString())) {
return;
} else {
downloadImageList.add(url + "?" + body.toJSONString());
}
OkHttpClient client = getClient();
Request request;
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(url);
if (method.equals("post")) {
FormBody.Builder bodyBuilder = new FormBody.Builder();
for (String key : body.keySet()) {
bodyBuilder.add(key, body.getString(key));
}
requestBuilder.post(bodyBuilder.build());
}
request = requestBuilder.build();
client.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
downloadInterface.onError(e);
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
File jar = null;
try {
File savePath = new File(downloadPath + saveName + "_tmp.tmp");
if (!savePath.exists()) {
savePath.getParentFile().mkdirs();
}
Log.i("donwloadImage", "下载文件:" + url + "?" + body + " 保存文件:" + saveName);
Log.i("downloadImageCode", response.code() + "");
InputStream inputStream = response.body().byteStream();
jar = new File(downloadPath + File.separator + "image_cache" + File.separator + saveName + "_tmp.tmp");
if (!new File(downloadPath + File.separator + "image_cache").exists()) {
new File(downloadPath + File.separator + "image_cache").mkdirs();
}
if (!jar.exists()) {
jar.createNewFile();
}
Log.i(NetworkTool.class, "临时保存文件:" + jar.getAbsolutePath());
OutputStream outputStream = new FileOutputStream(jar);
byte[] bytes = new byte[1024];
int len;
while ((len = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, len);
}
outputStream.close();
inputStream.close();
File oldJar = new File(downloadPath + saveName);
/*if (oldJar.exists()) {
oldJar.delete();
}*/
jar.renameTo(oldJar);
Log.i(NetworkTool.class, "实际保存:" + oldJar.getAbsolutePath() + " " + oldJar.getName());
Log.toast(MyApplication.application, "下载完成,重启生效");
if (downloadInterface != null) {
downloadInterface.onDownloadOver(oldJar);
}
} catch (Exception e) {
e.printStackTrace();
if (downloadInterface != null)
downloadInterface.onError(e);
}
downloadImageList.remove(url + "?" + body.toJSONString());
}
});
}
private OkHttpClient getClient() {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.SECONDS)
.build();
return client;
}
}