我有从API连接获取响应的问题,我使用logcat(Log.wtf)测试它然后在我的ConnectAPI.java中收到数据的第一个类中发现了logcat,但是logcat(Log。 wtf)在我的main.java中的第二个类中无法获得第一堂课的响应,请帮我弄清楚它有什么不对,非常感谢!
第一堂课(在ConnectAPI.java中)
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());
}
});
}
});
第二课(在main.java中)
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);
}
});
答案 0 :(得分:2)
多么可怕的失败:报告一个永远不会发生的情况。该错误将始终记录在具有调用堆栈的ASSERT级别。根据系统配置,可以将报告添加到DropBoxManager和/或可以使用错误对话框立即终止进程。
这是Log.wtf背后的文档。当您使用Log.wtf时,它可能会抛出错误。在这种情况下,它会被您拥有的try-catch捕获。不要使用Log.wtf进行调试,因为这会导致应用程序崩溃。
使用Log.d(或Log.d或您喜欢的任何内容)但在任何情况下都不使用Log.wtf进行调试。
将Log.wtf替换为另一个Log调用(我建议使用Log.d),然后重试。
最有可能发生的事情是Log.wtf抛出异常。然后,您可以通过方便的try-catch捕获此异常。然后代码打印出错误消息。它不打印的原因是因为它还会抛出一个异常,然后你就不会完全打印出来了,这就解释了为什么你不知道是什么原因导致它
为了将来的目的,在打印堆栈跟踪时,请使用e.printStackTrace
,因为它会打印整个堆栈跟踪,而不仅仅是错误消息。
您遇到的另一个错误是与您的代码长度相关的问题。如果oyu目标API 24或更高版本,则有23个字符限制:
如果tag.length()&gt ;,则抛出IllegalArgumentException。 23对于Nougat(7.0)版本(API< = 23)和之前的版本,在此API级别之后没有标记限制。
如果您未定位API 24或更高版本,请忽略此部分。
如果您的目标是API 24或更高版本,则必须将标记缩短为23个字符或更少。保持标签简短通常是个好主意,如果不是
,API 24+会使应用程序崩溃