![](/img/trans.png)
[英]how to direct to another activity after successful login, Android Developer Studio
[英]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.