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

View File

@ -6,6 +6,8 @@ import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.os.Build; import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.MediaMetadataCompat;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast; 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.Datas.PreviousPlayerList;
import com.yutou.nas_music_player.Interfaces.NetworkInterface; import com.yutou.nas_music_player.Interfaces.NetworkInterface;
import com.yutou.nas_music_player.MyApplication; 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.AppTools;
import com.yutou.nas_music_player.tools.CollectionTools; import com.yutou.nas_music_player.tools.CollectionTools;
import com.yutou.nas_music_player.tools.ConfigTools; import com.yutou.nas_music_player.tools.ConfigTools;
@ -162,12 +165,13 @@ public class MusicContainer {
/** /**
* 随机下一首歌 * 随机下一首歌
*
* @param play 是否直接播放 * @param play 是否直接播放
* @param networkInterface 获取完成 * @param networkInterface 获取完成
*/ */
private void playOfAllRandom(boolean play, NetworkInterface networkInterface) { private void playOfAllRandom(boolean play, NetworkInterface networkInterface) {
System.out.println("随机下一首"); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
@ -179,10 +183,11 @@ public class MusicContainer {
e.printStackTrace(); e.printStackTrace();
json.put("path", baseData); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
System.err.println(data);
if (json.getInteger("code") == 0) { if (json.getInteger("code") == 0) {
nowPlayData = JSONArray.parseObject(json.getString("data"), MusicData.class); nowPlayData = JSONArray.parseObject(json.getString("data"), MusicData.class);
if (networkInterface != null) { if (networkInterface != null) {
@ -527,7 +532,7 @@ public class MusicContainer {
} }
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("favorite", editText.getText().toString()); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
@ -553,7 +558,7 @@ public class MusicContainer {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("fid", musicData.getId()); json.put("fid", musicData.getId());
json.put("md5s", array); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
@ -589,12 +594,12 @@ public class MusicContainer {
public void onCollectionList(String collection, NetworkInterface networkInterface) { public void onCollectionList(String collection, NetworkInterface networkInterface) {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
String url = NetworkTool.NetworkAPI.MUSIC_Collection_Dir_List; String url = HttpManager.NetworkAPI.MUSIC_Collection_Dir_List;
if (collection != null) { if (collection != null) {
url = NetworkTool.NetworkAPI.MUSIC_Collection_Get; url = HttpManager.NetworkAPI.MUSIC_Collection_Get;
json.put("fid", Integer.parseInt(collection)); json.put("fid", Integer.parseInt(collection));
} }
NetworkTool.init().httpGet(url, json, new NetworkInterface() { HttpManager.getInstance().httpPost(url, json, new NetworkInterface() {
@Override @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
if (StringUtil.isEmpty((String) data)) { if (StringUtil.isEmpty((String) data)) {
@ -617,7 +622,14 @@ public class MusicContainer {
musicData.setDir(false); musicData.setDir(false);
list.add(musicData); list.add(musicData);
} }
new Handler(Looper.getMainLooper())
.post(new Runnable() {
@Override
public void run() {
networkInterface.httpGetData(list, 0); networkInterface.httpGetData(list, 0);
}
});
} }
} else { } else {
networkInterface.httpGetData(new ArrayList<>(), 0); networkInterface.httpGetData(new ArrayList<>(), 0);
@ -642,7 +654,7 @@ public class MusicContainer {
} }
json.put("data", array); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
@ -693,7 +705,7 @@ public class MusicContainer {
} else { } else {
json.put("album", album); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
@ -708,7 +720,14 @@ public class MusicContainer {
musicData.setAlbum((String) album); musicData.setAlbum((String) album);
list.add(musicData); list.add(musicData);
} }
new Handler(Looper.getMainLooper())
.post(new Runnable() {
@Override
public void run() {
networkInterface.httpGetData(list, 0); networkInterface.httpGetData(list, 0);
}
});
} }
} else { } else {
networkInterface.httpGetData(new ArrayList<>(), 0); networkInterface.httpGetData(new ArrayList<>(), 0);
@ -723,7 +742,7 @@ public class MusicContainer {
} }
public void onDirMusicData(JSONObject json, NetworkInterface networkInterface) { 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); JSONObject json = JSONObject.parseObject((String) data);
@ -753,7 +772,7 @@ public class MusicContainer {
JSONObject json = new JSONObject(); JSONObject json = new JSONObject();
json.put("path", path); json.put("path", path);
json.put("type", type); 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 @Override
public void httpGetData(Object data, int state) { public void httpGetData(Object data, int state) {
JSONObject json = JSONObject.parseObject((String) data); 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;
}
}