Cloud Code 函数:try-catch 没有捕获到 ClassCastException
Cloud Code function: try-catch did not catch ClassCastException
这是一个 Cloud Code 函数:
Parse.Cloud.define('testQuery', function(request, response) {
response.success('Test String');
});
我通过Parse调用这个函数Android SDK:
try {
HashMap<String, Object> params = new HashMap<>();
ParseCloud.callFunctionInBackground("testQuery", params, new FunctionCallback<ArrayList<String>>() {
@Override
public void done(ArrayList<String> results, ParseException e) {
Log.d("Test", "Done");
}
});
} catch (ClassCastException e) {
Log.d("Test", "Exception: " + e.toString());
}
我知道我正在从 String 转换为 ArrayList,这将导致 ClassCastException。所以我添加了一个 try-catch,但应用程序仍然崩溃。我无法捕获异常的原因是什么?谢谢
E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.honestly, PID: 23014
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
at app.myapp.MyActivity.done(MyActivity.java:189)
at com.parse.ParseTaskUtils.run(ParseTaskUtils.java:115)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5234)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
顾名思义,ParseCloud.callFunctionInBackground
表明 callback
参数是异步执行的。输入try catch
,存储ParseCloud.callFunctionInBackground
和callback
,退出try catch
,然后在某个时间点执行callback
函数。
解决它的一种方法是接受一个String
,然后将其转换为数组列表:
ParseCloud.callFunctionInBackground("testQuery", params, new FunctionCallback<String>() {
@Override
public void done(String results, ParseException e) {
try {
List<String> result = convertToList(results);
}catch(Exception ex){
Log.e("Test", "Problem " + ex);
}
Log.d("Test", "Done");
}
});
这是一个 Cloud Code 函数:
Parse.Cloud.define('testQuery', function(request, response) {
response.success('Test String');
});
我通过Parse调用这个函数Android SDK:
try {
HashMap<String, Object> params = new HashMap<>();
ParseCloud.callFunctionInBackground("testQuery", params, new FunctionCallback<ArrayList<String>>() {
@Override
public void done(ArrayList<String> results, ParseException e) {
Log.d("Test", "Done");
}
});
} catch (ClassCastException e) {
Log.d("Test", "Exception: " + e.toString());
}
我知道我正在从 String 转换为 ArrayList,这将导致 ClassCastException。所以我添加了一个 try-catch,但应用程序仍然崩溃。我无法捕获异常的原因是什么?谢谢
E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.honestly, PID: 23014
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
at app.myapp.MyActivity.done(MyActivity.java:189)
at com.parse.ParseTaskUtils.run(ParseTaskUtils.java:115)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5234)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
顾名思义,ParseCloud.callFunctionInBackground
表明 callback
参数是异步执行的。输入try catch
,存储ParseCloud.callFunctionInBackground
和callback
,退出try catch
,然后在某个时间点执行callback
函数。
解决它的一种方法是接受一个String
,然后将其转换为数组列表:
ParseCloud.callFunctionInBackground("testQuery", params, new FunctionCallback<String>() {
@Override
public void done(String results, ParseException e) {
try {
List<String> result = convertToList(results);
}catch(Exception ex){
Log.e("Test", "Problem " + ex);
}
Log.d("Test", "Done");
}
});