AndroidNetworking.post()在通过字符串返回之前不等待响应数据

问题描述 投票:0回答:2

我在aar模块中有一个函数,需要使用onResponse()等待onError()AndroidNetworking响应。输出是return首先执行,然后等待其将收到的任何响应。我在等待响应返回到我的应用程序时遇到问题。我还在函数上使用了synchronized。这是我模块上的代码

 public static synchronized String getActivationData(final Context context, final String api, final String base64Header, final String endpoint, final JSONObject body) {

    final String[] result = {null};

    new Thread(new Runnable() {
        @Override
        public void run() {
            StrictMode.ThreadPolicy policy =
                    new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);


            String baseURL = null;

            if (api.equalsIgnoreCase("LOCAL")) {
                baseURL = Environments.getMarkLocalAPI();
            } else if (api.equalsIgnoreCase("DEVELOPMENT")) {
                baseURL = Environments.getDevelopmentAPI();
            } else if (api.equalsIgnoreCase("STAGING")) {
                baseURL = Environments.getStagingAPI();
            } else if (api.equalsIgnoreCase("DEPLOYMENT")) {
                baseURL = Environments.getDeploymentAPI();
            }

            final String finalBaseURL = baseURL;


            OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                    .connectTimeout(15, TimeUnit.SECONDS)
                    .readTimeout(15, TimeUnit.SECONDS)
                    .writeTimeout(15, TimeUnit.SECONDS)
                    .build();

            AndroidNetworking.initialize(context, okHttpClient);

            AndroidNetworking.post(finalBaseURL + endpoint)
                    .setPriority(Priority.HIGH)
                    .addJSONObjectBody(body)
                    .addHeaders("Project", base64Header)
                    .addHeaders("Content-Type", "application/json")
                    .build()
                    .getAsJSONObject(new JSONObjectRequestListener() {

                        @Override
                        public void onResponse(JSONObject response) {
                            result[0] = String.valueOf(response);
                        }

                        @Override
                        public void onError(ANError anError) {
                            if (anError.getErrorCode() != 0) {
                                result[0] = String.valueOf(anError.getErrorDetail());

                            } else {
                                result[0] = String.valueOf(anError.getErrorDetail());
                            }
                        }
                    });
            Log.i("data", result[0]);
        }
    }).start();
    return result[0];
}

并通过:调用我的应用程序上的函数]

String data = ActivationResponseV2.getActivationData(getContext(), "LOCAL", header, "/sample/response", jsonObject);

我可以知道我在做什么错吗?。谢谢!

我在aar模块内部有一个函数,需要使用AndroidNetworking等待onResponse()或onError()响应。输出是返回值首先执行,然后等待任何响应...

android multithreading synchronization android-networking
2个回答
0
投票

响应是在post调用之外返回的:要处理此问题,您可以将回调方法传递给函数以在准备就绪时使用结果。


0
投票

我已经使用ANRequest完成了此操作。阅读this文件后。我尝试复制它,然后得到所需的输出。

© www.soinside.com 2019 - 2024. All rights reserved.