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


IllegalStateException thrown for my app in Android

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

主活动.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));
    }
}

注册.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);
    }
}

背景工作者.java

public class BackgroundWorker extends AsyncTask<String,Void,String> {
    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);
    }
}

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

注册.php

<?php 
require "conn.php";
$name = $_POST["name"];
$username = $_POST["username"];
$password = $_POST["password"];
$role = $_POST["role"];

$mysql_qry = "insert into  employee_data (name, username, password, role)  values ('$name', '$username', '$password', '$role')";
if($conn->query($mysql_qry) === TRUE){
    echo "success";
}
else {
    echo "fail".$mysql_qry."<br>".$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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="10dp">
<TextView
    android:layout_width="wrap_content"
    android:text="Name"
    android:layout_height="wrap_content" />
<EditText
    android:id="@+id/etName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"/>
<TextView
    android:layout_width="wrap_content"
    android:text="Username"
    android:layout_height="wrap_content" />
<EditText
    android:id="@+id/etUsername"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"/>
<TextView
    android:layout_width="wrap_content"
    android:text="Password"
    android:layout_height="wrap_content" />
<EditText
    android:id="@+id/etPassword"
    android:layout_width="match_parent"
    android:inputType="textPassword"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"/>
<TextView
    android:layout_width="wrap_content"
    android:text="Role"
    android:layout_height="wrap_content" />
<EditText
    android:id="@+id/etRole"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"/>
<Button
    android:id="@+id/bRegister"
    android:text="Register"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="OnRegister"/>

当您添加 android:onClick 属性时,您还必须进行widget clickable。将 xml 更新为

<Button
    android:id="@+id/bRegister"
    android:text="Register"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:onClick="OnRegister"/>

希望这有帮助。

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

相关文章: