安卓中的java解析查询问题
嘿,伙计们,我正试图使用parse查询从parse数据库中检索一个值,但是当我试图从一个检查表中某个特定值是否存在的方法返回一个布尔值时,我不能完全理解程序的流程。以下是代码:
public class UsersSignUp extends Activity {
Button btnxxx;
EditText edt;
Context mContext = this;
CheckInternetConnectivity checkInternetConnectivity;
String housenumber;
String objectid;
boolean b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xyyxyx);
btnxxx = (Button) findViewById(R.id.btnSignUp);
btnxxx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edt = (EditText) findViewById(R.id.txtHouse);
if (isValidHouseNum(edt.getText().toString())) {
Log.d("Bool Value 2:", edt.getText().toString());
String h=edt.getText().toString();
Log.d("Bool Value 2.1:", h);
b=checkIfRegistered(h);
Log.d("Check: ", String.valueOf(b));
}
else {
Animation shake = AnimationUtils.loadAnimation(UsersSignUp.this, R.anim.shake);
edt.startAnimation(shake);
Toast.makeText(getApplicationContext(), "Please enter valid house number!", Toast.LENGTH_LONG).show();
}
}
});
}
public boolean isValidHouseNum(String housenumber) {
boolean check;
if (housenumber.length() > 6 || housenumber.length() < 6) {
check = false;
} else {
check = true;
}
return check;
}
public boolean checkIfRegistered(String house_number)
{
ParseQuery<ParseObject> query2=ParseQuery.getQuery("SampleTable_123456");//Table Name in parse
query2.whereEqualTo("housenumber", house_number);
query2.getFirstInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject parseObject, ParseException e) {
if (parseObject == null) {
Log.d("Message 1:", "Number not retreived");
b = false;
Log.d("Message 4:", String.valueOf(b));
} else {
Log.d("Message 2:", "Number Retrieved");
String number = parseObject.getString("housenumber");
b = true;
Log.d("Message 5:", String.valueOf(b));
Log.d("Message 2:", number);
}
}
});
Log.d("Message 3:", String.valueOf(b));
return b;
}
这是我在数据库中搜索的号码存在时收到的日志:
- 价值2:﹕ 123456
- 价值2.1:﹕ 123456
- D/信息3:﹕ 假的
- D/支票:﹕ 假的
- D/信息2:﹕ 检索到的号码
- D信息5:﹕ 真的
- D/信息2:﹕ 123456
虽然它应该首先返回true,但在看到日志后它仍然存在,这是相当混乱的。帮帮我,伙计们
# 1 楼答案
如果调试此代码,您会发现在调用
getFirstInBackground
之后,它将跳转到Log.d("Message 3:", String.valueOf(b))
语句,此时它的false
不要返回任何值在
done
中放入您想要的任何内容