Java 无法使用查询从分析数据库检索字符串
我试图从解析对象中检索信息,但我存储它们的字符串保持等于null 下面是我如何保存对象的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
// 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>()