Java 无法使用查询从分析数据库检索字符串

Java 无法使用查询从分析数据库检索字符串,java,android,parse-platform,Java,Android,Parse Platform,我试图从解析对象中检索信息,但我存储它们的字符串保持等于null 下面是我如何保存对象的 // get current user ParseObject studentClasses = new ParseObject("StudentClasses"); // register their periods into database studentClasses.put("student_id", ParseUser.getCu

我试图从解析对象中检索信息,但我存储它们的字符串保持等于null

下面是我如何保存对象的

        // get current user
        ParseObject studentClasses = new ParseObject("StudentClasses");

        // register their periods into database
        studentClasses.put("student_id", ParseUser.getCurrentUser());
        studentClasses.put("first_period", ClassSelected_Period[PERIOD1]);
        studentClasses.put("second_period", ClassSelected_Period[PERIOD2]);
        studentClasses.put("third_period", ClassSelected_Period[PERIOD3]);
        studentClasses.put("fourth_period", ClassSelected_Period[PERIOD4]);
        studentClasses.put("fifth_period", ClassSelected_Period[PERIOD5]);
        studentClasses.put("sixth_period", ClassSelected_Period[PERIOD6]);
        studentClasses.put("seventh_period", ClassSelected_Period[PERIOD7]);

        // save the information into database
        studentClasses.saveInBackground();
它在我的数据库中保存得非常好。student_id是指向用户的指针,其余列是字符串

我想检索所有这些字符串,并在查询解析它们时将它们放入一个数组中,因为它不起作用

这是我的问题

        // check if a user is not cached
        ParseUser currentUser = ParseUser.getCurrentUser();
        if (currentUser == null)
        {
            // prompt user to Register screen
            // create intent to start activity
            Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            // start new activity
            startActivity(intent);

            // stop current activity
            finish();
        }

        // query database for user's classes
        ParseQuery<ParseObject> query = ParseQuery.getQuery("StudentClasses");
        query.whereEqualTo("student_id", ParseUser.getCurrentUser());

        query.getFirstInBackground(new GetCallback<ParseObject>()
        {
            @Override
            public void done (ParseObject parseObject, ParseException e)
            {
                if (e == null)
                {
                    // retrieved the object
                    userClasses[PERIOD1] = parseObject.getString("first_period");
                    userClasses[PERIOD2] = parseObject.getString("second_period");
                    userClasses[PERIOD3] = parseObject.getString("third_period");
                    userClasses[PERIOD4] = parseObject.getString("fourth_period");
                    userClasses[PERIOD5] = parseObject.getString("fifth_period");
                    userClasses[PERIOD6] = parseObject.getString("sixth_period");
                    userClasses[PERIOD7] = parseObject.getString("seventh_period");
                }
                else
                {
                    // failed lookup. Do something here
                    Toast.makeText(getApplicationContext(),"Exception Thrown" ,Toast.LENGTH_SHORT).show();
                }
            }
        });
//检查是否未缓存用户
ParseUser currentUser=ParseUser.getCurrentUser();
if(currentUser==null)
{
//提示用户注册屏幕
//创建启动活动的意图
意向意向=新意向(MainActivity.this、RegisterActivity.class);
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
//开始新的活动
星触觉(意向);
//停止当前活动
完成();
}
//查询数据库中的用户类
ParseQuery=ParseQuery.getQuery(“学生类”);
query.whereEqualTo(“学生id”,ParseUser.getCurrentUser());
getFirstInBackground(新的GetCallback()
{
@凌驾
公共void完成(ParseObject ParseObject,parsee异常)
{
如果(e==null)
{
//检索到该对象
userClasses[PERIOD1]=parseObject.getString(“第一个周期”);
userClasses[PERIOD2]=parseObject.getString(“第二个周期”);
userClasses[PERIOD3]=parseObject.getString(“第三个周期”);
userClasses[PERIOD4]=parseObject.getString(“第四个周期”);
userClasses[PERIOD5]=parseObject.getString(“第五个周期”);
userClasses[PERIOD6]=parseObject.getString(“第六个周期”);
userClasses[PERIOD7]=parseObject.getString(“第七个周期”);
}
其他的
{
//查找失败。请在此处执行操作
Toast.makeText(getApplicationContext(),“抛出异常”,Toast.LENGTH_SHORT.show();
}
}
});
我查看了解析文档,它看起来应该可以工作,但它没有保存字符串

任何帮助或意见都将不胜感激,谢谢


编辑:我为查询部分显示了更多代码,以显示有当前用户

在这里,我假设有数据存储在您的解析数据库中。。而且效果很好。。因此,要检索它,请尝试以下操作

 ParseQuery<ParseObject> query = ParseQuery.getQuery("StudentClasses");
    query.whereEqualTo("student_id", ParseUser.getCurrentUser());

    query.findInBackground(new FindCallback<ParseObject>()
    {
        @Override
        public void done (List<ParseObject> list, ParseException e)
        {
            if (e == null)
            {
               for(int i=0; i < list.size(); i++) {
                userClasses[PERIOD1] = list.get(i).getString("first_period");
                userClasses[PERIOD2] = list.get(i).getString("second_period");
                userClasses[PERIOD3] = list.get(i).getString("third_period");
                userClasses[PERIOD4] = list.get(i).getString("fourth_period");
                userClasses[PERIOD5] = list.get(i).getString("fifth_period");
                userClasses[PERIOD6] = list.get(i).getString("sixth_period");
                userClasses[PERIOD7] = list.get(i).getString("seventh_period");
               }
            }
            else
            {
              Toast.makeText(getApplicationContext(),"Exception Thrown" ,Toast.LENGTH_SHORT).show();
            }
        }
    });
ParseQuery query=ParseQuery.getQuery(“StudentClasses”);
query.whereEqualTo(“学生id”,ParseUser.getCurrentUser());
findInBackground(新的FindCallback()
{
@凌驾
公共作废完成(列表,异常解析)
{
如果(e==null)
{
对于(int i=0;i

希望有帮助

获取内容时,请尝试使用该功能

parseObject.get("the_name_of_the_column")

这对我来说应该是可行的,而且很好。这里你需要了解的是你的代码
studentClasses.saveInBackground()
是异步调用,您需要在SaveCallback中进行查询。然后,您可以确保在查询运行时保存的数据在数据库中。 您得到了
null
数据,因为您在数据保存到parse之前进行了查询

 ParseObject studentClasses = new ParseObject("StudentClasses");
            // register their periods into database
            studentClasses.put("student_id", ParseUser.getCurrentUser());
            studentClasses.put("first_period", ClassSelected_Period[PERIOD1]);
            studentClasses.put("second_period", ClassSelected_Period[PERIOD2]);
            studentClasses.put("third_period", ClassSelected_Period[PERIOD3]);
            studentClasses.put("fourth_period", ClassSelected_Period[PERIOD4]);
            studentClasses.put("fifth_period", ClassSelected_Period[PERIOD5]);
            studentClasses.put("sixth_period", ClassSelected_Period[PERIOD6]);
            studentClasses.put("seventh_period", ClassSelected_Period[PERIOD7]);

            // save the information into database
           studentClasses.saveInBackground(new SaveCallback() {
       public void done(ParseException e) {
         if (e == null) {
           ParseQuery<ParseObject> query = ParseQuery.getQuery("StudentClasses");
           query.whereEqualTo("student_id", ParseUser.getCurrentUser());
           query.getFirstInBackground(new GetCallback<ParseObject>()
            {
            @Override
            public void done (ParseObject parseObject, ParseException e)
            {
                if (e == null)
                {
                    // retrieved the object
                    userClasses[PERIOD1] = parseObject.getString("first_period");
                    userClasses[PERIOD2] = parseObject.getString("second_period");
                    userClasses[PERIOD3] = parseObject.getString("third_period");
                    userClasses[PERIOD4] = parseObject.getString("fourth_period");
                    userClasses[PERIOD5] = parseObject.getString("fifth_period");
                    userClasses[PERIOD6] = parseObject.getString("sixth_period");
                    userClasses[PERIOD7] = parseObject.getString("seventh_period");
                }
                else
                {
                    // failed lookup. Do something here
                    Toast.makeText(getApplicationContext(),"Exception Thrown" ,Toast.LENGTH_SHORT).show();
                }
            }
        });
         } else {
          // myObjectSaveDidNotSucceed();
         }
       }
     });
ParseObject studentClasses=新的ParseObject(“studentClasses”);
//将其周期注册到数据库中
put(“student_id”,ParseUser.getCurrentUser());
学生课堂。put(“第一个课时”,课堂选择课时[PERIOD1]);
学生课堂。put(“第二个课时”,课堂选择课时[PERIOD2]);
学生课堂。put(“第三个课时”,课堂选择课时[PERIOD3]);
学生课堂。put(“第四个课时”,课堂选择课时[PERIOD4]);
学生课堂。put(“第五课时”,课堂选择课时[PERIOD5]);
学生课堂。put(“第六学期”,课堂选择学期[PERIOD6]);
学生课堂。put(“第七课时”,选课课时[第七课时]);
//将信息保存到数据库中
saveInBackground(新的SaveCallback(){
公共作废完成(Parsee异常){
如果(e==null){
ParseQuery=ParseQuery.getQuery(“学生类”);
query.whereEqualTo(“学生id”,ParseUser.getCurrentUser());
getFirstInBackground(新的GetCallback()
{
@凌驾
公共void完成(ParseObject ParseObject,parsee异常)
{
如果(e==null)
{
//检索到该对象
userClasses[PERIOD1]=parseObject.getString(“第一个周期”);
userClasses[PERIOD2]=parseObject.getString(“第二个周期”);
userClasses[PERIOD3]=parseObject.getString(“第三个周期”);
userClasses[PERIOD4]=parseObject.getString(“第四个周期”);
userClasses[PERIOD5]=parseObject.getString(“第五周期
query.findInBackground(new FindCallback<ParseObject>()
@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // initialise and set toolbar as actionbar
        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        setSupportActionBar(toolbar);

        // initialize nav bars
        initNavBars();

        // initialize drawer layout
        NavigationView navView = (NavigationView) findViewById(R.id.navigation_view);

        // initialize nav drawer
        navDrawer = (DrawerLayout) findViewById(R.id.drawer);
        initNavDrawer(navDrawer);

        // initialize layout manager for recycler view
        RecyclerView.LayoutManager mainLayoutManager = new LinearLayoutManager(this);

        // initialize data for all classes before setting adapter
        initClassData();  // <---- MY PARSE QUERY IS IN THIS METHOD

        // set the adapter for recycler view
        RecyclerView.Adapter mainAdapter = new MainRecyclerAdapter(classrooms);

        // initialize recycler view elements
        RecyclerView mainRecyclerView = (RecyclerView) findViewById(R.id.main_recycler_view);

        // add layout manager to recycler view
        mainRecyclerView.setLayoutManager(mainLayoutManager);

        // add adapter to recycler view
        mainRecyclerView.setAdapter(mainAdapter);

        Toast.makeText(getApplicationContext(), userClasses[PERIOD1], Toast.LENGTH_SHORT).show(); // <----- HERE IS MY TOAST
    }
 @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // initialise and set toolbar as actionbar
        toolbar = (Toolbar) findViewById(R.id.tool_bar);
        setSupportActionBar(toolbar);

        // initialize nav bars
        initNavBars();

        // initialize drawer layout
        NavigationView navView = (NavigationView) findViewById(R.id.navigation_view);

        // initialize nav drawer
        navDrawer = (DrawerLayout) findViewById(R.id.drawer);
        initNavDrawer(navDrawer);

        // initialize layout manager for recycler view
        RecyclerView.LayoutManager mainLayoutManager = new LinearLayoutManager(this);

        // initialize data for all classes before setting adapter
        initClassData(); // <---- PARSE QUERY IS STILL IN THIS METHOD

        // set the adapter for recycler view
        RecyclerView.Adapter mainAdapter = new MainRecyclerAdapter(classrooms);

        // initialize recycler view elements
        RecyclerView mainRecyclerView = (RecyclerView) findViewById(R.id.main_recycler_view);

        // add layout manager to recycler view
        mainRecyclerView.setLayoutManager(mainLayoutManager);

        // add adapter to recycler view
        mainRecyclerView.setAdapter(mainAdapter);

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                // Do something after 5s = 5000ms
                Toast.makeText(getApplicationContext(), userClasses[PERIOD1], Toast.LENGTH_SHORT).show();
            }
        }, 5000);
    }
query.getFirstInBackground(new GetCallback<ParseObject>()