在 Android 中为我的应用程序抛出 IllegalStateException
Posted
技术标签:
【中文标题】在 Android 中为我的应用程序抛出 IllegalStateException【英文标题】:IllegalStateException thrown for my app in Android 【发布时间】:2016-05-12 05:49:02 【问题描述】:所以我的第一部分登录工作正常。没有问题。现在,当我尝试使用相同的应用程序进行注册时,它就停止了工作。我迷路了,我是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_
android:layout_
android:padding="10dp">
<TextView
android:layout_
android:text="Name"
android:layout_ />
<EditText
android:id="@+id/etName"
android:layout_
android:layout_
android:layout_marginBottom="10dp"/>
<TextView
android:layout_
android:text="Username"
android:layout_ />
<EditText
android:id="@+id/etUsername"
android:layout_
android:layout_
android:layout_marginBottom="10dp"/>
<TextView
android:layout_
android:text="Password"
android:layout_ />
<EditText
android:id="@+id/etPassword"
android:layout_
android:inputType="textPassword"
android:layout_
android:layout_marginBottom="10dp"/>
<TextView
android:layout_
android:text="Role"
android:layout_ />
<EditText
android:id="@+id/etRole"
android:layout_
android:layout_
android:layout_marginBottom="10dp"/>
<Button
android:id="@+id/bRegister"
android:text="Register"
android:layout_
android:layout_
android:onClick="OnRegister"/>
【问题讨论】:
请记录您遇到的错误 请发布你的日志 刚刚编辑了错误。不知道如何将其放入***的格式。对此感到抱歉 没关系。那么哪一行是 28,哪个变量是 null?调试器会显示它 在registration.java第28行是String str_username = UsernameEt.getText().toString(); 【参考方案1】:当您添加android:onClick
属性时,您还必须创建widget
clickable
。将 xml 更新为
<Button
android:id="@+id/bRegister"
android:text="Register"
android:layout_
android:layout_
android:clickable="true"
android:onClick="OnRegister"/>
希望这会有所帮助。
更新
这行UsernameEt = (EditText) findViewById(R.id.etUserName);
是罪魁祸首,因为register_activity xml
不包含id etUserName
。它指向其他一些 xml,而不是这个 xml 包含这个 id etUsername
【讨论】:
awww.. 你让我激动了一会儿。但不幸的是。它仍然停止工作..让我又伤心了..哈哈。不过还是不错的。 你看到更新的答案了吗?etUserName
应该是 etUsername
,因为活动注册 xml 不包含 etUserName
ooooo... 我没有意识到您更新了您的答案.. 我之前正在做 xml 文件.. 大声笑.. 现在一切正常。 tqvm 的帮助.. 现在我为弄乱大小写感到愚蠢.. demit.. tq 再次..以上是关于在 Android 中为我的应用程序抛出 IllegalStateException的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Docker 自托管 Jitsi 服务器中为我的 Android 应用程序实现 jwt 令牌韵律插件?
如何在 android 中以编程方式在小米手机安全应用程序中为我的应用程序启用自动启动选项
如何在我的可视 C# Web 服务中为我的 android 应用程序调用 LINQ 中的用户定义函数?
如何在 android 中为 TextView 设置字体? [复制]