有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从帮助器类返回时,java ParseObject为空

在我的活动中,我尝试调用应该返回Parseobject的方法:

ParseQueryHelper parseQueryHelper = new ParseQueryHelper(CommentActivity.this, commentId);
ParseObject finalTopLevelCommentObject = parseQueryHelper.getTopLevelComment();
System.out.println("Watermelon: " + finalTopLevelCommentObject.getString("notificationText"));

但从helper类返回的ParseObject为null:

class ParseQueryHelper {

    private Context mContext;
    private String mCommentId;

    ParseQueryHelper(Context context, String commentId) {
        this.mContext = context;
        this.mCommentId = commentId;
    }

    // Retrieve the top-level Comment in a conversation thread
    ParseObject getTopLevelComment() {

        final ParseObject[] result = {null};
        ParseQuery<ParseObject> query = new ParseQuery<>(ParseConstants.CLASS_YEET);
        query.whereContains(ParseConstants.KEY_OBJECT_ID, mCommentId);
        query.findInBackground((yeets, e) -> {
            if (e == null) {

                for (ParseObject topLevelCommentObject : yeets) {

                    if (topLevelCommentObject != null) {
                        result[0] = topLevelCommentObject;
                    }
                }

            }
        });

        return result[0];
    }
}

例外情况:

08 - 28 01: 56: 57.156 22015 - 22015 / com.test.安卓 E / AndroidRuntime: FATAL EXCEPTION: main
Process: com.test.安卓, PID: 22015
java.lang.RuntimeException: Unable to start activity ComponentInfo {
 com.test.安卓 / com.test.安卓.activity.CommentActivity
}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.parse.ParseObject.getString(java.lang.String)'
on a null object reference
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2547)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2613)
at 安卓.app.ActivityThread.access$900(ActivityThread.java: 180)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java: 1473)
at 安卓.os.Handler.dispatchMessage(Handler.java: 111)
at 安卓.os.Looper.loop(Looper.java: 207)
at 安卓.app.ActivityThread.main(ActivityThread.java: 5710)
at java.lang.reflect.Method.invoke(Native Method)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 900)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java: 761)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.parse.ParseObject.getString(java.lang.String)'
on a null object reference
at com.test.安卓.activity.CommentActivity.createTopLevelCommentObject(CommentActivity.java: 198)
at com.test.安卓.activity.CommentActivity.onCreate(CommentActivity.java: 115)
at 安卓.app.Activity.performCreate(Activity.java: 6288)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1113)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2500)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2613) 
at 安卓.app.ActivityThread.access$900(ActivityThread.java: 180) 
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java: 1473) 
at 安卓.os.Handler.dispatchMessage(Handler.java: 111) 
at 安卓.os.Looper.loop(Looper.java: 207) 
at 安卓.app.ActivityThread.main(ActivityThread.java: 5710) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 900) 
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java: 761) 

我调试并验证了传递到方法构造函数中的字符串commentId是否有效,以及该对象是否存在于数据库中。但是当返回ParseObject或result[0]时,它是空的。为什么

或者,但这不是异步的:

// Retrieve the top-level Comment in a conversation thread

ParseObject getTopLevelComment() {

    ParseObject result = null;

    ParseQuery<ParseObject> query = new ParseQuery<>(ParseConstants.CLASS_YEET);
    query.whereContains(ParseConstants.KEY_OBJECT_ID, mCommentId);
    try {
        List<ParseObject> results = query.find();
        result = results.get(0);
        return result;
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return result;
}

共 (1) 个答案

  1. # 1 楼答案

    这是正常的,也是预期的,您的代码是异步的,在您的return result[0]result尚未填充查询响应时