gpt4 book ai didi

java - android studio Sqlite 数据库 java.lang.IllegalStateException : getDatabase called recursively

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:41 25 4
gpt4 key购买 nike

请帮我解决这个错误,我找不到解决方法。这是我第一次在 android studio 中使用 SQlite 数据库。我想从数据库中获取数据,所以我得到了这个错误 进程:com.raisse.guessplayers,PID:14400

 Process: com.raisse.guessplayers, PID: 14400
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.raisse.guessplayers/com.raisse.guessplayers.MainActivity}: java.lang.IllegalStateException: getDatabase called recursively
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3150)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3260)
at android.app.ActivityThread.access$1000(ActivityThread.java:218)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1734)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6934)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.IllegalStateException: getDatabase called recursively
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:203)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.raisse.guessplayers.Db_sqlit.insertData(Db_sqlit.java:39)
at com.raisse.guessplayers.Db_sqlit.onCreate(Db_sqlit.java:29)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.raisse.guessplayers.Db_sqlit.getAllData(Db_sqlit.java:50)
at com.raisse.guessplayers.MainActivity.onCreate(MainActivity.java:45)
at android.app.Activity.performCreate(Activity.java:6609)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3103)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3260) 
at android.app.ActivityThread.access$1000(ActivityThread.java:218) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1734) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:6934) 

public class Db_sqlit extends SQLiteOpenHelper{

String TABLE_NAME = "tableballs";

public final static String name = "db_data";

public Db_sqlit(Context context) {
super(context, name, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+TABLE_NAME+" (id INTEGER PRIMARY KEY AUTOINCREMENT, balls INTEGER)");

insertData(1);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}

public boolean insertData(int balls){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("balls",balls);
long result = db.insert("tableballs",null,contentValues);
if (result == -1)
return false;
else
return true;
}

public Cursor getAllData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
return res;
}
}

public class MainActivity extends AppCompatActivity {

//Text
TextView mSettings;
TextView mBalls;

//Button
Button mBut_start;

//Animation
Animation anim;

//Db_sqlite


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);



//TEXT
mSettings = (TextView)findViewById(R.id.mSettings);
mBalls = (TextView)findViewById(R.id.mText_Balls);

//Sqlite
Db_sqlit db_sqlit= new Db_sqlit(this);
Cursor res = db_sqlit.getAllData();
if(res.getCount()==0){
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
return;
}
StringBuffer buffer = new StringBuffer();
String id = buffer.append(res.getString(0)).toString();
mBalls.setText(id);


//Animation
anim = AnimationUtils.loadAnimation(this,R.anim.scale_anim);

//button
mBut_start = (Button)findViewById(R.id.mBut_start);
mBut_start.startAnimation(anim);
mBut_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),LevelActicity.class);
startActivity(intent);

}
});


}
}

请大家帮帮我

最佳答案

首先,您可能希望阅读更多关于 what recursion means in computer programming 的信息.

然后,从 SQLiteOpenHelperonCreate()onUpgrade(),你不能调用 getReadableDatabase()getWritableDatabase(),因为它们将触发对 onCreate()onUpgrade() 的另一个调用。

此外,您不需要调用它们,因为您已经获得了 SQLiteDatabase,因此您不需要调用方法来检索它。

所以:

  • insertData(1); 替换为 insertData(db, 1);

  • public boolean insertData(int balls) 替换为 public boolean insertData(SQLiteDatabase db, int balls)

  • insertData()

    中移除SQLiteDatabase db = this.getWritableDatabase();

关于java - android studio Sqlite 数据库 java.lang.IllegalStateException : getDatabase called recursively,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com