Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与程序中的控制流混淆_Java_Android_Parse Platform - Fatal编程技术网

Java 与程序中的控制流混淆

Java 与程序中的控制流混淆,java,android,parse-platform,Java,Android,Parse Platform,我在android应用程序中使用Parse数据库。我对我的程序connectdatabase.java中控件的流动方式感到困惑。代码如下: public class ConnectDatabase extends Activity { public static int LOGIN_STATUS; public static void main(String[] args) { // TODO Auto-generated method stub }

我在android应用程序中使用Parse数据库。我对我的程序
connectdatabase.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

您要求在后台完成一项任务,因此当该任务在后台完成时,您的程序将继续执行其余任务。您可能需要某种侦听器或回调方法,当您的任务完成时可以调用这些方法来执行其他任务,如果您需要依赖于在执行某段代码之前所做的事情。

我在parse 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,如果找不到用户或出现网络错误,将抛出该异常

好的。在我的例子中,我正在活动中调用authenticate(..)方法,所以它显然期望从同一个方法返回值。done()方法不允许我返回任何东西,那么我如何实现它呢?您需要了解什么是异步方法