繁体   English   中英

Android帐户管理器,并在成功登录后启动其他活动

[英]Android Account Manager and starting another activity on successful login

我目前正在开发我的应用程序,并创建了简单的身份验证过程。 当用户提供登录名和密码时,它将数据发送到服务器,并检查MySql数据库。 我想将用户凭据存储在安全的地方,我们知道这是客户经理。 我不知道它如何工作以及如何将其应用到我的代码中。 我发现的许多教程都很老,比如2010年或更早。

这段代码工作正常,但我需要添加更改。 就像如果用户成功登录一样,我想启动活动,它将把他重定向到MainPanel.class活动。 我试图将这样的代码放入SingnInActivity,但它说方法startActivity无法识别。 有什么想法使它起作用吗?

 public void login(View view){
    Intent intent = new Intent(this, loginActivity.class);
    startActivity(intent);
}

有谁能够帮助我? 我感谢您的帮助。

我的loginActivity看起来像这样:

public class loginActivity extends Activity {
private EditText usernameField,passwordField;
private TextView status,role;
public String d;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    usernameField = (EditText)findViewById(R.id.usernameField);
    passwordField = (EditText)findViewById(R.id.passwordField);
    status = (TextView)findViewById(R.id.status);
    role = (TextView)findViewById(R.id.textView5);
}



public void loginPost(View view){
    String username = usernameField.getText().toString();
    String password = passwordField.getText().toString();
//there I use another activity to 'sign in' 
    new SignInActivity(this,status,role).execute(username,password);
}

}

这是SignInActivity

public class SignInActivity extends AsyncTask<String,Void,String>{

private TextView statusField,roleField;
private Context context;
String d;
public SignInActivity(Context context, TextView statusField, TextView roleField) {
    this.context = context;
    this.statusField = statusField;
    this.roleField = roleField;
}
protected void onPreExecute(){

}

@Override
protected String doInBackground(String... arg0) {

        try{
            String username = (String)arg0[0];
            String password = (String)arg0[1];
            String link="http://myserver/index.php";
            String data  = URLEncoder.encode("username", "UTF-8")
                    + "=" + URLEncoder.encode(username, "UTF-8");
            data += "&" + URLEncoder.encode("password", "UTF-8")
                    + "=" + URLEncoder.encode(password, "UTF-8");
            URL url = new URL(link);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter
                    (conn.getOutputStream());
            wr.write( data );
            wr.flush();
            BufferedReader reader = new BufferedReader
                    (new InputStreamReader(conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;
            // Read Server Response
            while((line = reader.readLine()) != null)
            {
                sb.append(line);
                break;
            }

            d=sb.toString();
            return d;

        }catch(Exception e){
            return new String("Exception: " + e.getMessage());
        }

}

protected void onPostExecute(String result){

    if(result.equals("adminstrator")){
        this.statusField.setText("Yes");
//if user is in my database it changes statusfield to 'yes'
    }
    else{
        this.statusField.setText("No");
    }
    this.roleField.setText(result);
}

}

AsyncTask中没有方法startActivity 它在Activity类中。 如果您不了解什么是继承,请从该链接开始。

将上下文更改为活动:

private Activity context;
public SignInActivity(Activity context, TextView statusField, TextView roleField) {
    this.context = context;
    this.statusField = statusField;
    this.roleField = roleField;
}

然后使用

Intent intent = new Intent(this, MainPanel.class);
context.startActivity(intent);

实际上,使用AccountManager非常复杂。 您真的不能将其放入现有工作流程中。 您需要可以由Android框架绑定的AbstractAccountAuthenticator的实现。 它将在必要时调用您的登录活动。

这个应用程式中有一个相当容易理解的例子

...顺便说一句,在我的《 Enterprise Android》一书中对其进行了很好的描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM