有 Java 编程相关的问题?

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

安卓中的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) 个答案

  1. # 1 楼答案

    如果调试此代码,您会发现在调用getFirstInBackground之后,它将跳转到Log.d("Message 3:", String.valueOf(b))语句,此时它的false

    不要返回任何值done中放入您想要的任何内容

    query2.getFirstInBackground(new GetCallback<ParseObject>() {
        @Override
        public void done(ParseObject parseObject, ParseException e) {
            if (parseObject == null) {
               //null means number is not registered
              // next step must be here if number not register dont return any value
    
    
    
            } else {
               //number is registerd so print toast here
            }
        }
    });