Java 从Android中的API获取响应

Java 从Android中的API获取响应,java,android,api,response,Java,Android,Api,Response,我在从API连接获取响应时遇到问题,我使用logcat(Log.wtf)对其进行测试,然后在ConnectAPI.java中的第一个类中找到了logcat,该类已接收数据,但在main.java中的第二个类中的logcat(Log.wtf)无法从第一个类中获取响应,请帮我弄清楚它到底出了什么问题,非常感谢 第一类(在ConnectAPI.java中) 第二类(在main.java中) 多么可怕的失败:报告一个永远不会发生的情况。错误将始终与调用堆栈一起记录在断言级别。根据系统配置,可能会向Dro

我在从API连接获取响应时遇到问题,我使用logcat(Log.wtf)对其进行测试,然后在ConnectAPI.java中的第一个类中找到了logcat,该类已接收数据,但在main.java中的第二个类中的logcat(Log.wtf)无法从第一个类中获取响应,请帮我弄清楚它到底出了什么问题,非常感谢

第一类(在ConnectAPI.java中)

第二类(在main.java中)

多么可怕的失败:报告一个永远不会发生的情况。错误将始终与调用堆栈一起记录在断言级别。根据系统配置,可能会向DropBoxManager添加报告和/或使用错误对话框立即终止该过程

这是Log.wtf背后的文档。当您使用Log.wtf时,它有可能抛出错误。在这种情况下,它会被您所拥有的try-catch捕获。不要使用Log.wtf进行调试,因为这会使应用程序崩溃

使用Log.d(或Log.d或你喜欢的任何东西),但在任何情况下都不要使用Log.wtf进行调试

用不同的日志调用(我建议使用Log.d)替换Log.wtf,然后重试


最可能发生的情况是Log.wtf抛出异常。然后,这个异常会被您在那里使用的方便的try-catch捕获。代码然后打印出错误消息。它不打印的原因是因为它还抛出了一个异常,而您没有完全打印出来,这解释了为什么您不知道是什么导致了它

出于将来的目的,在打印stacktrace时,请使用
e.printStackTrace
,因为它会打印整个stacktrace,而不仅仅是错误消息


您面临的另一个错误是与标记长度相关的问题。如果oyu的目标API为24或以上,则有23个字符的限制:


如果Nougat(7.0)发行版的标签.length()>23(API Log.wtf)会引发异常,则会引发IllegalArgumentException。您的日志标签在Log.wtf中也太长。除了更改日志类型外,还可以缩短标签。这么长的标签一定会引发IllegalArgumentException。因此,基本上:使用Log.d(或其他东西,而不是Log.wtf)把标签缩短到23个字符以下,没有空格我把标签缩短到12个字符,没有空格,这个问题仍然存在,有没有可能是因为我犯了一个与两个类之间的连接有关的错误?你在(我假设)PHP脚本中真的有什么反应吗?把logcat添加到你的问题中(即使没有错误/stacktrace,调试也很方便)您可能是对的,我正在检查从后端发送的所有响应,这可能需要一些时间,之后我会将所有日志粘贴到这里,我感谢您的帮助!
public static void A020 (final Context context, String Manual, final ZooCallback callback){
    HttpUrl url = new HttpUrl.Builder()
            .scheme(SCHEME)
            .host(HOST)
            .port(PORT)
            .addPathSegments(A020_PATH)
            .addQueryParameter("LId", PersonID.getID(context))
            .addQueryParameter("Coordinates", getGPS(context))
            .addQueryParameter("Manual", Manual)
            .build();

    Request request = new Request.Builder()
            .url(url)
            .build();

    Log.d("A020 printing out the url", url.toString());

    mClient.newCall(request).enqueue(new Callback() {

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            try {

 Log.wtf("A020 print out in connectapi",response.toString());

                if (response != null && response.isSuccessful()) {
                    String jsonData = response.body().string();
                    final JSONObject Jobject = new JSONObject(jsonData);
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callback.onSuccess(Jobject);
                        }
                    });
                }
            } catch (final JSONException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callback.onFail("exception", e.getMessage());
                    }
                });
            }
        }

        @Override
        public void onFailure(Call call, final IOException e) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onFail("onFailure", e.getMessage());
                }
            });
        }

    });
ConnectAPI.A020(context, Manual, new ZooCallback(){
        @Override
        public void onSuccess(JSONArray response){
            super.onSuccess(response);
            try{
                Log.wtf("A020 printing the response in mainjava", response.toString());


            }catch(JSONException e){
                Log.d("probleminA020", e.getMessage());
            }catch(Exception e){
                Log.d("probleminA020", e.getMessage());
            }
        }

        public void onFail(String title, String error){
            super.onFail(title, error);
            Log.d(TAG, error);
        }
    });