From e2b22fd7589219c3cd251fffb459c90d6d425833 Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 15 Aug 2022 00:34:33 +0800 Subject: [PATCH] Fix json parse error --- .../com/fongmi/android/tv/bean/Parse.java | 32 ++++++++++++++++-- .../com/fongmi/android/tv/net/OKHttp.java | 15 +++++---- .../com/fongmi/android/tv/player/Players.java | 33 +++++++++++++++---- 3 files changed, 65 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java index 510a14170..f95784feb 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Parse.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Parse.java @@ -6,6 +6,8 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.annotations.SerializedName; +import java.util.List; + public class Parse { @SerializedName("name") @@ -15,7 +17,7 @@ public class Parse { @SerializedName("url") private String url; @SerializedName("ext") - private String ext; + private Ext ext; public static Parse objectFrom(JsonElement element) { return new Gson().fromJson(element, Parse.class); @@ -58,8 +60,16 @@ public class Parse { this.url = url; } - public String getExt() { - return TextUtils.isEmpty(ext) ? "" : ext; + public Ext getExt() { + return ext; + } + + public boolean hasHeader() { + return getExt() != null && getExt().getHeader() != null; + } + + public JsonElement getHeader() { + return getExt().getHeader(); } @Override @@ -69,4 +79,20 @@ public class Parse { Parse it = (Parse) obj; return getName().equals(it.getName()); } + + public static class Ext { + + @SerializedName("flag") + private List flag; + @SerializedName("header") + private JsonElement header; + + public List getFlag() { + return flag; + } + + public JsonElement getHeader() { + return header; + } + } } diff --git a/app/src/main/java/com/fongmi/android/tv/net/OKHttp.java b/app/src/main/java/com/fongmi/android/tv/net/OKHttp.java index 9a6000f09..3421a71f6 100644 --- a/app/src/main/java/com/fongmi/android/tv/net/OKHttp.java +++ b/app/src/main/java/com/fongmi/android/tv/net/OKHttp.java @@ -1,11 +1,11 @@ package com.fongmi.android.tv.net; -import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; import okhttp3.Call; +import okhttp3.Headers; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -34,16 +34,19 @@ public class OKHttp { return mOk; } - public static Call newCall(T url) { - if (url instanceof HttpUrl) return get().client().newCall(new Request.Builder().url((HttpUrl) url).build()); - else return get().client().newCall(new Request.Builder().url((String) url).build()); + public static Call newCall(String url) { + return get().client().newCall(new Request.Builder().url(url).build()); } - public static Call newCall(String url, HashMap params) { + public static Call newCall(String url, Headers headers) { + return get().client().newCall(new Request.Builder().url(url).headers(headers).build()); + } + + public static Call newCall(String url, Map params) { return get().client().newCall(new Request.Builder().url(buildUrl(url, params)).build()); } - private static HttpUrl buildUrl(String url, HashMap params) { + private static HttpUrl buildUrl(String url, Map params) { HttpUrl.Builder builder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder(); for (Map.Entry entry : params.entrySet()) builder.addQueryParameter(entry.getKey(), entry.getValue()); return builder.build(); diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index b40fcc39e..dffcbbad4 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -11,6 +11,8 @@ import com.fongmi.android.tv.api.ApiConfig; import com.fongmi.android.tv.bean.Parse; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.event.PlayerEvent; +import com.fongmi.android.tv.net.Callback; +import com.fongmi.android.tv.net.OKHttp; import com.fongmi.android.tv.ui.custom.CustomWebView; import com.fongmi.android.tv.utils.ResUtil; import com.google.android.exoplayer2.ExoPlayer; @@ -23,11 +25,16 @@ import com.google.gson.JsonParser; import org.greenrobot.eventbus.EventBus; +import java.io.IOException; import java.util.Formatter; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import okhttp3.Call; +import okhttp3.Headers; +import okhttp3.Response; + public class Players implements Player.Listener { private CustomWebView webView; @@ -126,11 +133,14 @@ public class Players implements Player.Listener { private HashMap getHeaders(Result result) { HashMap headers = new HashMap<>(); if (result.getHeader().isEmpty()) return headers; - JsonElement element = JsonParser.parseString(result.getHeader()); - if (element.isJsonObject()) { - JsonObject object = element.getAsJsonObject(); - for (String key : object.keySet()) headers.put(key, object.get(key).getAsString()); - } + return getHeaders(JsonParser.parseString(result.getHeader())); + } + + private HashMap getHeaders(JsonElement element) { + HashMap headers = new HashMap<>(); + if (!element.isJsonObject()) return headers; + JsonObject object = element.getAsJsonObject(); + for (String key : object.keySet()) headers.put(key, object.get(key).getAsString()); return headers; } @@ -150,7 +160,18 @@ public class Players implements Player.Listener { if (parse.getType() == 0) { loadWebView(parse.getUrl() + result.getUrl()); } else if (parse.getType() == 1) { - + Headers headers = new Headers.Builder().build(); + if (parse.hasHeader()) headers = Headers.of(getHeaders(parse.getHeader())); + OKHttp.newCall(parse.getUrl() + result.getUrl(), headers).enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + } + + @Override + public void onFailure(@NonNull Call call, @NonNull IOException e) { + + } + }); } else if (parse.getType() == 2) { } else if (parse.getType() == 3) {