在Android中为我的应用程序抛出了IllegalStateException

所以我的第一部分登录工作正常。 它没有问题。 现在,当我尝试使用相同的应用程序进行注册时,它就停止了工作。 我迷失在这里,我是android开发的新手,所以我真的不明白给出的错误。

MainActivity.java

public class MainActivity extends AppCompatActivity { EditText UsernameEt, PasswordEt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UsernameEt = (EditText) findViewById(R.id.etUserName); PasswordEt = (EditText) findViewById(R.id.etPassword); } public void OnLogin(View view){ String username = UsernameEt.getText().toString(); String password = PasswordEt.getText().toString(); String type = "login"; BackgroundWorker backgroundWorker = new BackgroundWorker(this); backgroundWorker.setOnTaskFinishedListener(new BackgroundWorker.OnTaskFinishedListener() { @Override public void onTaskFinished(String result) { // Now you have the result of your login here. // Result should be "admin", "user", or "failed" // You can now create an intent and open the page // to your next activity. switch (result) { case "admin": // Create your intent. Intent adminIntent = new Intent(MainActivity.this, AdminPageActivity.class); // Start the admin page activity. startActivity(adminIntent); break; case "user": // Create your intent. Intent userIntent = new Intent(MainActivity.this, UserPageActivity.class); // Start the user page activity. startActivity(userIntent); break; default: // Login failed. Intent failIntent = new Intent(MainActivity.this, MainActivity.class); startActivity(failIntent); break; } } }); backgroundWorker.execute(type, username, password); } public void openRegistration(View view){ startActivity(new Intent(this, Registration.class)); } } 

Registration.java

 public class Registration extends AppCompatActivity { EditText NameEt, RoleEt, UsernameEt, PasswordEt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_registration); NameEt = (EditText) findViewById(R.id.etName); UsernameEt = (EditText) findViewById(R.id.etUserName); PasswordEt = (EditText) findViewById(R.id.etPassword); RoleEt = (EditText) findViewById(R.id.etRole); } public void OnRegister(View view) { String str_name = NameEt.getText().toString(); String str_username = UsernameEt.getText().toString(); String str_password = PasswordEt.getText().toString(); String str_role = RoleEt.getText().toString(); String type = "register"; BackgroundWorker backgroundWorker = new BackgroundWorker(this); backgroundWorker.execute(type, str_name, str_username, str_password, str_role); } } 

BackgroundWorker.java

 public class BackgroundWorker extends AsyncTask { Context context; AlertDialog alertDialog; BackgroundWorker (Context ctx) { context = ctx; } @Override protected String doInBackground(String... params) { String type = params[0]; String login_url = "http://ipaddress/folder/login.php"; String register_url = "http://ipaddress/folder/register.php"; if(type.equals("login")) { try { String user_name = params[1]; String password = params[2]; URL url = new URL(login_url); HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); OutputStream outputStream = httpURLConnection.getOutputStream(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); String post_data = URLEncoder.encode("user_name","UTF-8")+"="+URLEncoder.encode(user_name,"UTF-8") +"&" + URLEncoder.encode("password","UTF-8") + "=" + URLEncoder.encode(password,"UTF-8"); bufferedWriter.write(post_data); bufferedWriter.flush(); bufferedWriter.close(); outputStream.close(); InputStream inputStream = httpURLConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); String result=""; String line=""; while((line = bufferedReader.readLine())!= null) { result += line; } bufferedReader.close(); inputStream.close(); httpURLConnection.disconnect(); return result; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else if(type.equals("register")) { try { String name = params[1]; String username = params[2]; String password = params[3]; String role = params[4]; URL url = new URL(register_url); HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); OutputStream outputStream = httpURLConnection.getOutputStream(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); String post_data = URLEncoder.encode("name", "UTF-8") + "=" + URLEncoder.encode(name,"UTF-8") + "&" + URLEncoder.encode("username", "UTF-8")+"="+URLEncoder.encode(username,"UTF-8") + "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password,"UTF-8") + "&" + URLEncoder.encode("role","UTF-8") + "=" + URLEncoder.encode(role,"UTF-8"); bufferedWriter.write(post_data); bufferedWriter.flush(); bufferedWriter.close(); outputStream.close(); InputStream inputStream = httpURLConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); String result=""; String line=""; while((line = bufferedReader.readLine())!= null) { result += line; } bufferedReader.close(); inputStream.close(); httpURLConnection.disconnect(); return result; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return null; } public interface OnTaskFinishedListener { void onTaskFinished(String result); } // Member property to reference listener. private OnTaskFinishedListener mOnTaskFinishedListener; // Setter for listener. public void setOnTaskFinishedListener(OnTaskFinishedListener listener) { mOnTaskFinishedListener = listener; } @Override protected void onPreExecute() { alertDialog = new AlertDialog.Builder(context).create(); alertDialog.setTitle("Login Status"); } @Override protected void onPostExecute(String result) { alertDialog.setMessage(result); alertDialog.show(); switch (result) { case "failed": // Login failed. break; case "user": // Login successful, result (role) is "user" result = "user"; break; case "admin": // Login successful, result (role) is "admin" result = "admin"; break; } if (mOnTaskFinishedListener != null) { mOnTaskFinishedListener.onTaskFinished(result); } } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } } 

我刚刚在backgroundworker.java上添加了另一个if else注册。

register.php

 query($mysql_qry) === TRUE){ echo "success"; } else { echo "fail".$mysql_qry."
".$conn->error; } $conn->close(); ?>

我被困在这里请帮忙。

错误日志

 Process: com.example.user.mysqldemo, PID: 1325 java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.example.user.mysqldemo.Registration.OnRegister(Registration.java:28) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) 

6.Activity_registration.xml

          

当你添加android:onClick属性时,你必须使widget clickable 。 将xml更新为

  

希望这可以帮助。

更新此行UsernameEt = (EditText) findViewById(R.id.etUserName); 由于register_activity xml不包含id etUserName是罪魁祸首。 它指向其他一些xml而不是这个xml包含这个id etUsername