Android 应用程序在按下按钮时崩溃,我可以';t解释错误日志
以下代码用于我正在使用的应用程序的登录验证:Android 应用程序在按下按钮时崩溃,我可以';t解释错误日志,android,Android,以下代码用于我正在使用的应用程序的登录验证: public class Login extends AppCompatActivity implements View.OnClickListener{ private EditText inputemail; private EditText inputpassword; private Button btnlogin; private static final String LOGIN_URL = "http://wwww.example.co
public class Login extends AppCompatActivity implements View.OnClickListener{
private EditText inputemail;
private EditText inputpassword;
private Button btnlogin;
private static final String LOGIN_URL = "http://wwww.example.com/foodify/login.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
inputemail = (EditText)findViewById(R.id.input_email);
inputpassword = (EditText)findViewById(R.id.input_password);
btnlogin = (Button)findViewById(R.id.btn_login);
btnlogin.setOnClickListener(this);
Button aboutapp = (Button)findViewById(R.id.learnmore);
aboutapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent learnmore = new Intent(Login.this, AboutApp.class);
startActivity(learnmore);
}
});
Button signup = (Button)findViewById(R.id.signupnow);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent signup = new Intent(Login.this, SignUp.class);
startActivity(signup);
}
});
Button ccode = (Button)findViewById(R.id.ccodebtn);
ccode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent ccode = new Intent(Login.this, Confirmation_Sign_Up.class);
startActivity(ccode);
}
});
btnlogin.setOnClickListener(this);
}
@Override
public void onClick(View v){
if(v == btnlogin){
LoginUser();
}
}
private void LoginUser() {
String email = inputemail.getText().toString();
String password = inputpassword.getText().toString();
login(email,password);
}
private void login(String email, String password) {
String urlSuffix = "?email="+email+"&password="+password;
class LoginUser extends AsyncTask<String, Void, String> {
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
loading = ProgressDialog.show(Login.this, "Please Wait","Authenticating...", true, true);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
loading.dismiss();
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
if (s.matches("Login successful")) {
Intent regcom = new Intent();
regcom.setClass(getApplicationContext(), main_menu.class);
startActivity(regcom);
}
}
@Override
protected String doInBackground(String... params) {
String s = params[0];
BufferedReader bufferedReader = null;
try {
URL url = new URL(LOGIN_URL+s);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String result;
result = bufferedReader.readLine();
return result;
}catch(Exception e){
return null;
}
}
}
LoginUser ru = new LoginUser();
ru.execute(urlSuffix);
}
}
我检查了login.php文件中的错误,没有发现任何错误。我真的不明白错误指的是什么,也不知道如何继续。如有任何建议,将不胜感激。:) 更改doInBackground的返回语句,如下所述
@Override
protected String doInBackground(String... params) {
String s = params[0];
BufferedReader bufferedReader = null;
try {
URL url = new URL(LOGIN_URL+s);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String result;
result = bufferedReader.readLine();
return result;
}catch(Exception e){
// return null;
// change this to
e.printStackTrace();
return "Error in login";
}
}
打印异常将是检查它是否在其他地方失败的一个好主意。java.lang.NullPointerException:如果您有NullPointerException,请尝试调用虚拟方法'boolean'。这应该是您在错误处理中了解到的第一件事。在某些情况下,doInBackground的可能副本返回null,然后尝试在
postExecute
中调用.matches
。如果try语句中存在postExecute
error中的s上的null检查,则添加。确保它工作正常。
@Override
protected String doInBackground(String... params) {
String s = params[0];
BufferedReader bufferedReader = null;
try {
URL url = new URL(LOGIN_URL+s);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String result;
result = bufferedReader.readLine();
return result;
}catch(Exception e){
// return null;
// change this to
e.printStackTrace();
return "Error in login";
}
}