架构使网络调用和解析JSON响应

loc*_*ost 3 android json okhttp android-mvp

我正在开发一个新的Android应用程序,我想适当地组织所有组件-网络调用类,JSON解析类等。我正在使用Okhttp进行网络通话;经过大量研究,我能够像这样构造我的代码:

我的NetworkUtil类:

public class NetworkUtil {

public static void getData(String url, final OkHttpListener listener){
    OkHttpClient client = new OkHttpClient();
    // GET request
    Request request = new Request.Builder()
            .url(url)
            .build();
    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Request request, IOException e) {
            listener.onFailure(request, e);
        }
        @Override
        public void onResponse(Response response) throws IOException {
            listener.onResponse(response);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我的网络回调接口:

public interface OkHttpListener {
void onFailure(Request request, IOException e);
void onResponse(Response response) throws IOException;
}
Run Code Online (Sandbox Code Playgroud)

这是我的Activity类:

OkHttpListener listener = new OkHttpListener() {
        @Override
        public void onFailure(Request request, IOException e) {
            Log.e(LOG_TAG, e.toString());
        }

        @Override
        public void onResponse(Response response) throws IOException {
            String responseBody = response.body().string();
            Log.i(LOG_TAG, responseBody);
        }
    };
    String url = "http://myserver/api/getvalues";
    OkHttpUtils.getData(url, listener);
    String url1 = "http://myserver/api/getvalues/123";
    OkHttpUtils.getData(url1, listener);
}
Run Code Online (Sandbox Code Playgroud)

这是我面临的问题:

  1. 我想基于不同的事件从活动/片段进行多个网络调用,如何设计活动类以使我能够发出多个请求。我还想为将在“活动”中使用的所有常用方法保留一个单独的类(也许是一个Application类)。我想使我的体系结构具有凝聚力。

  2. 我想在一个单独的类中解析JSON响应,并将结果传递给我的Activity类。如何在一个单独的类中解析JSON响应,并将结果从NetworkUtil类中的onSuccess()方法传递给我的Activity / Fragment类

  3. 我想在整个项目中不使用任何库或使用更少的库(至少用于JSON解析部分),此时,我将只使用okhttp。

如果有人可以将我引到git存储库或示例项目中进行查看,那将有很大的帮助。

Ant*_*kov 5

您当前的代码无法进行测试,并且违反SOLID原则,您的活动很快就会变得太大而无法轻松维护。尽量避免使用Utils类。使用IoC。因此,我建议您看一下MVP / MVVM或任何其他演示模式。

  1. 您应该为每个API调用创建单独的函数。
  2. 使用JSON的工作绝对应该从您的活动中移出。在使用OkHttp时,建议您对它使用Retrofit。较高的级别使您的API易于调用,并且可以使用Gson / Jackson / Moshi或任何其他库作为内置适配器,因此您不必担心将Json字符串序列化/编组为Java对象,翻新适配器将负责它。

搜索有关MVP模式的一些文章,并查看存储库。祝好运。