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

时间:2016-02-03 06:38:50

标签: java php android xampp

所以我的第一部分登录工作正常。它没有问题。现在,当我尝试使用相同的应用程序进行注册时,它就停止了工作。我迷失在这里,我是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<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进行注册。

register.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"/>

1 个答案:

答案 0 :(得分:1)

当您添加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不包含身份etUserName。它指向其他一些xml而不是此xml包含此id etUsername