java - 单击按钮且应用程序停止时出现 IllegalStateException

标签 java android sqlite

我正在使用 Android Studio 和 Genymotion 作为模拟器创建一个应用程序,其中我在 3 个 EditText 中输入数据,当我单击按钮将其存储在 sqlite 数据库中时,它不起作用......这就是什么我在 LOGCAT 中看到

FATAL EXCEPTION: main
                                             Process: com.example.aadeshmishra.com.sdk18, PID: 1551
                                             java.lang.IllegalStateException: Could not execute method for android:onClick
                                                 at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
                                                 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:288)
                                                 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.aadeshmishra.com.sdk18.ThirdActitvity.addData(ThirdActitvity.java:64)
                                                 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:288) 
                                                 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) 

该按钮将调用 ThirdActivity 中名为 addData() 的方法。

here the code for ThirdActivity.java

public class ThirdActitvity extends AppCompatActivity {

EditText ed1,ed2,ed3;
Button B1;
UserDBHelper mydb;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_third);

    ed1 = (EditText)findViewById(R.id.E1);
    ed2 = (EditText)findViewById(R.id.E2);
    ed3 = (EditText)findViewById(R.id.E3);
    B1  = (Button) findViewById(R.id.addB);
}
public void addData(View view)
{
    String name    = ed1.getText().toString();
    String desc    = ed2.getText().toString();
    String contact = ed3.getText().toString();

    Boolean r1 = mydb.insertDataClient(name,desc,contact);

    if(r1 == true)
    {
        Toast.makeText(this,"Data inserted",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(this,"Data not inserted",Toast.LENGTH_LONG).show();
    }
}
}

Here the Code for activity_third.xml

<EditText
    android:id="@+id/E1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/client"
    android:textSize="20sp"
    android:layout_marginEnd="20dp"/>

<EditText
    android:id="@+id/E2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/destail"
    android:textSize="20sp"
    android:layout_alignEnd="@+id/E1" />

<EditText
    android:id="@+id/E3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:hint="@string/EN"
    android:textSize="20sp"
    android:layout_marginBottom="18dp"
    android:layout_above="@+id/addB"
/>

<Button
    android:id="@+id/addB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="49dp"
    android:text="@string/add"
    android:textSize="20sp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:onClick="addData"
    />

And at Last the UserDbHelper.java

public class UserDBHelper extends SQLiteOpenHelper {

// Database Details
private static final int DB_VER = 1;
private static final String DB_NAME = "DIARY_DB";

// Table Name
private static final String table_clientinfo = "Client_Info";


// columns
private static final String name = "Name";
private static final String desc = "Desc";
private static final String cont = "Contact";

// Create table -- ClientInfo
private String Create_ClientInfo = "Create table "+ table_clientinfo +"(" + id + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                                    + name + " TEXT ," + desc + " TEXT,"
                                    + cont + " INTEGER)";

public UserDBHelper(Context context)
{
    super(context,DB_NAME,null,DB_VER);
}
@Override
public void onCreate(SQLiteDatabase db)
{
    db.execSQL(Create_ClientInfo);
    db.close();
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
}
public Boolean insertDataClient(String Name, String Desc, String Contact)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues con = new ContentValues();
    con.put(name,Name);
    con.put(desc,Desc);
    con.put(cont,Contact);
    long r = db.insert(table_clientinfo,null,con);
    db.close();
    if(r == -1)
    {
        return false;
    }
    else
    {
        return true;
    }
}}

谁能告诉我出了什么问题..? 提前致谢..!

最佳答案

您需要在onCreate中初始化mydb(或者在任何地方使用它之前,尽管oncreate只执行一次,所以最好在onCreate中进行)作为

UserDBHelper mydb;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_third);
    mydb = new UserDBHelper(this);
    //^^^^^^^^^^^^^^^^^^^^^
    ed1 = (EditText)findViewById(R.id.E1);
    ed2 = (EditText)findViewById(R.id.E2);
    ed3 = (EditText)findViewById(R.id.E3);
    B1  = (Button) findViewById(R.id.addB);
}

关于java - 单击按钮且应用程序停止时出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47815251/

相关文章:

java - eclipse 中的 SSL keystore 路径

java - 如何在 javascript 方法中访问 HashMap 值?

java - BigDecimal 的对数

java - 运行时异常: NullPointerException with SQLite Database

java - 按钮在Click中不起作用

带有私有(private) jre/jdk 的 Android Studio IDE?操作系统

android - 如果我在我的 Android 应用程序中使用 3rd 方库,我应该把许可证放在哪里

android - 尝试连接到模拟器时处理卡在 "Waiting for device"

android - fragment 的 onOptionsItemSelected 没有被调用

Android:从 SQLite 数据库行中删除值