对程序中的控制流程感到困惑

时间:2014-11-12 04:45:08

标签: java android parse-platform

我在我的Android应用程序中使用Parse数据库。我对程序ConnectDatabse.java中控件流动的方式感到困惑。这是代码:

public class ConnectDatabase extends Activity {
    public static int LOGIN_STATUS;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
    public static boolean authenticate(Context c, String email, String password) {
        Log.d("Message", email+" & "+password);
        Parse.initialize(c, "IFm3T3f7445F8fRILTcO", "HTwH2gycHQMS7LpyAf43mud");
        ParseUser.logInInBackground(email, password, new LogInCallback() {
        @Override
        public void done(ParseUser user, ParseException e) {
            // TODO Auto-generated method stub
            Log.d("Inside done", "Msg: " + e);
            if (user != null) {
                 LOGIN_STATUS = 1;
                 Log.d("LOGIN_STATUS value", Integer.toString(LOGIN_STATUS));
            } 
            else {
                 LOGIN_STATUS = 0;
            }
        }
        });
        Log.d("After done(..)" , Integer.toString(LOGIN_STATUS));
        if(LOGIN_STATUS == 1) return true;
        else return false;       

        }
    }

我的LoginActivity.java代码是:

public void login(View v) {
        AutoCompleteTextView emailInput = (AutoCompleteTextView) findViewById(R.id.email);
        EditText passwordInput = (EditText) findViewById(R.id.password);
        String email = emailInput.getText().toString();
        String password = passwordInput.getText().toString();
        if(ConnectDatabase.authenticate(this, email, password) == true) {
            Toast toast = Toast.makeText(getApplicationContext(), "Login Successful", Toast.LENGTH_LONG);
            toast.show();
        }
        else {
            Toast toast = Toast.makeText(getApplicationContext(), "Login Unsuccessful", Toast.LENGTH_LONG);
            toast.show();
        }
    }

在logcat窗口中,它首先显示“Message”标签,然后是“After done(..)”,然后是“Inside done”,然后是“LOGIN_STATUS value”= 1

2 个答案:

答案 0 :(得分:1)

您已要求在后台完成任务,因此您的程序将在后台完成该任务时继续执行其余任务。你可能想要某种类型的监听器或回调方法,你可以在完成任务时调用它来执行其他任务,如果你需要在执行某段代码之前依赖某些事情。

答案 1 :(得分:0)

我在解析API的文档中找到了解决方案。这是我的最终ConnectDatabase.java

public static boolean authenticate(Context c, String email, String password) throws ParseException {
        Log.d("Message", email+" & "+password);
        Parse.initialize(c, "IFmI83T3f7445F8fRILTcO", "HTwH2gycHQMSDvLpyAf43mud");
        ParseUser.logIn(email, password);
        return true;
        }

并且在LoginActivity.java中我捕获了ParseException,如果找不到用户或者出现网络错误,将抛出ParseException。