【发布时间】:2017-06-09 19:13:51
【问题描述】:
我是 Android 编程新手,但我想制作一个应用程序,将用户数据存储在 Firebase 上并将其恢复。我让身份验证工作,但是一旦我将其重定向到他们必须填写详细信息的表单,但每当我尝试登录时它就会崩溃。
package example.com.myapplication;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class MainActivity extends AppCompatActivity {
private Button Signup, Signin, FPbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance();
Signin = (Button) findViewById(R.id.Loginbtn);
Signup = (Button) findViewById(R.id.signupbtn);
FPbtn = (Button) findViewById(R.id.FPBtn);
//Forgot Password
FPbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, ResetPassword.class));
}
});
/* //Register Method
Signup.setOnClickListener(new View.OnClickListener() {
EditText email = (EditText) findViewById(R.id.usernamefield);
EditText password = (EditText) findViewById(R.id.passwordfield);
String email3 = email.getText().toString();
final String password3 = password.getText().toString();
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(email3)) {
Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password3)) {
Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
} else
{
startActivity(new Intent(MainActivity.this, OTP.class));
}
}
}); */
Signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, sign_up.class));
}
});
//Login Method
Signin.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
EditText email = (EditText) findViewById(R.id.usernamefield);
EditText password = (EditText) findViewById(R.id.passwordfield);
String email2 = email.getText().toString();
final String password2 = password.getText().toString();
if (TextUtils.isEmpty(email2)) {
Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password2)) {
Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
return;
}
mAuth.signInWithEmailAndPassword(email2, password2)
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(MainActivity.this, getString(R.string.auth_failed), Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent(MainActivity.this, Profile.class);
startActivity(intent);
finish();
}
}
});
}
});
}
}
然后这是我要将其重定向到的 Profile.Java 文件
package example.com.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class Profile extends AppCompatActivity {
private EditText t1,t2,t3,t4,t5;
private Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
t1 = (EditText)findViewById(R.id.FirstNameField);
t2 = (EditText)findViewById(R.id.LastNameField);
t3 = (EditText)findViewById(R.id.AgeField);
t4 = (EditText)findViewById(R.id.WL1);
t5 = (EditText)findViewById(R.id.WL2);
b1 = (Button)findViewById(R.id.ProfSubmit);
FirebaseDatabase User1 = FirebaseDatabase.getInstance();
DatabaseReference Name = User1.getReference("Fname");
DatabaseReference LName = User1.getReference("LName");
DatabaseReference age = User1.getReference("age");
DatabaseReference Work1 = User1.getReference("WorkLink1");
DatabaseReference Work2 = User1.getReference("WorkLink2");
Name.setValue(t1.getText());
LName.setValue(t2.getText());
age.setValue(t3.getText());
Work1.setValue(t4.getText());
Work2.setValue(t5.getText());
startActivity(new Intent(Profile.this, HomeScreen.class));
finish();
}
});
// ...
}
}
【问题讨论】:
-
数据库拥有登录详情权限。我尝试在意图中链接其他活动并且它有效。我也没有收到任何 java 编译错误的错误。 (不要介意 MainActivity 中的注释代码块。它不起作用,但我懒得删除它)
-
你能把日志也发一下吗
-
不是通过 MainActivity.this 上下文启动新活动,而是创建上下文的全局变量,在 onCreate() 方法中对其进行初始化,或者为该按钮创建 onClick 函数并放置启动新活动的相同代码活动...我也遇到过同样的问题,用这种方法解决了
-
@SidharthAnil 我尝试在调试模式下使用我的手机来获取日志,但我最终得到了这个。到目前为止,我一直在构建 APK 并将它们手动安装在手机上。 dumptext.com/vpKDN5kR
-
@JayPatel 你能详细说明一下吗?
标签: android firebase firebase-realtime-database firebase-authentication