gpt4 book ai didi

java - android.database.sqlite.SQLiteCantOpenDatabaseException : unknown error (code 14 SQLITE_CANTOPEN): Could not open database

转载 作者:行者123 更新时间:2023-12-01 17:59:14 38 4
gpt4 key购买 nike

我在网站上阅读了有关此问题的各种内容,但我无法弄清楚这一点。我被这一步卡住了好久。我该如何解决这个问题

Logcat 输出

根据logcat,这是由SQLiteCantOpenDatabaseException引起的

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test123/com.example.test123.Cart}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3304)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3443)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7520)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14 SQLITE_CANTOPEN): Could not open database
at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:197)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:505)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:206)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:198)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:915)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:895)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:786)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:733)
at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:264)
at Database.Database.getCarts(Database.java:24)
at com.example.test123.Cart.loadListFood(Cart.java:58)
at com.example.test123.Cart.onCreate(Cart.java:54)
at android.app.Activity.performCreate(Activity.java:7894)
at android.app.Activity.performCreate(Activity.java:7881)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3279)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3443) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040) 
at android.os.Handler.dispatchMessage(Handler.java:107) 
at android.os.Looper.loop(Looper.java:224) 
at android.app.ActivityThread.main(ActivityThread.java:7520) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 

数据库.java

public class Database extends SQLiteAssetHelper {
private static final String DB_NAME="QODB.db";
private static final int DB_ver=1;
public Database(Context context) {
super(context, DB_NAME,null,DB_ver);
}

public List<Order> getCarts()
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

String[] sqlSelect={"ProductName","ProductId","Quantity","Price","Discount"};
String sqlTable="OrderDetail";

qb.setTables(sqlTable);
Cursor c = qb.query(db,sqlSelect,null,null,null,null,null);

final List<Order> result = new ArrayList<>();
if (c.moveToFirst())
{
do{
result.add(new Order(c.getString(c.getColumnIndex("ProductId")),
c.getString(c.getColumnIndex("ProductName")),
c.getString(c.getColumnIndex("Quantity")),
c.getString(c.getColumnIndex("Price")),
c.getString(c.getColumnIndex("Discount"))
));

}while (c.moveToNext());
}
return result;
}

public void addToCart(Order order)
{
SQLiteDatabase db = getReadableDatabase();
String query = String.format("INSERT INTO OrderDetail(ProductId,ProductName,Quantity,Price,Discount) VALUES('%s','%s','%s','%s','%s');",
order.getProductId(),
order.getProductName(),
order.getQuantity(),
order.getPrice(),
order.getDiscount());
db.execSQL(query);

}

public void cleanCart(Order order)
{
SQLiteDatabase db = getReadableDatabase();
String query = String.format("DELETE FROM orderDetail");
db.execSQL(query);
}

Cart.java

public class Cart extends AppCompatActivity {

RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;

FirebaseDatabase database;
DatabaseReference request;
TextView txtTotalPrice;
FButton btnPlace;

List<Order> cart = new ArrayList<>();
CartAdapter adapter;

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

//Firebase
database = FirebaseDatabase.getInstance();
request=database.getReference("Requests");

//Init
recyclerView = (RecyclerView)findViewById(R.id.listCart);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);

txtTotalPrice = (TextView)findViewById(R.id.total);
btnPlace = (FButton)findViewById(R.id.btnPlaceOrde);

loadListFood();
}

private void loadListFood() {
cart = new Database(this).getCarts();
adapter = new CartAdapter(cart,this);
recyclerView.setAdapter(adapter);

//Calculate total price
int total =0;
for(Order order:cart)
total+=(Integer.parseInt(order.getPrice()))*(Integer.parseInt(order.getQuantity()));

Locale locale = new Locale("en","US");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);

txtTotalPrice.setText(fmt.format(total));
}

AndroidManifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test123">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity android:name=".Cart"></activity>
<activity android:name=".FoodDetail" />
<activity android:name=".FoodList" />
<activity
android:name=".Home"
android:label="@string/title_activity_home"
android:theme="@style/AppTheme.NoActionBar" />
<activity android:name=".SignUp" />
<activity android:name=".SignIn" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

Database.Database.getCarts(Database.java:24) 处的错误是 SQLiteDatabase db = getReadableDatabase();

com.example.test123.Cart.loadListFood(Cart.java:58) 处的错误是 cart = new Database(this).getCarts();

com.example.test123.Cart.onCreate(Cart.java:54) 处的错误是 loadListFood();

最佳答案

打开 AndroidManifest.xml 文件并在 list 标记(应该是顶级标记)中添加以下权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

关于java - android.database.sqlite.SQLiteCantOpenDatabaseException : unknown error (code 14 SQLITE_CANTOPEN): Could not open database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60664045/

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