آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل دیتابیس sqlite در اندروید 6

aminaryan  8 سال پیش  8 سال پیش
0 0

با سلام. من روی اندروید 6 برنامه ساخت دیتابیس رو اجرا کردم و کرش کرد و همونو در اندروید 5 اجرا کردم و کار کرد.

کدها

 package aryan.mohammadamin.testgradle;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.File;

public class ActivityMain extends AppCompatActivity {

public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/Android/data/test";

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

database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database.sqlite", null);
database.execSQL("CREATE TABLE IF NOT EXISTS users (" +
"sql_id INTEGER NOT NULL ," +
" sql_name VARCHAR NOT NULL ," +
" sql_email TEXT NOT NULL ," +
" sql_password TEXT NOT NULL )");

database.execSQL("INSERT INTO users (sql_id,sql_name,sql_email,sql_password) VALUES (0,'0','0','0')");
}
}

ارور های logcat

 07-02 18:18:43.216 2483-2483/aryan.mohammadamin.testgradle E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: aryan.mohammadamin.testgradle, PID: 2483
                                                                             java.lang.RuntimeException: Unable to start activity ComponentInfo{aryan.mohammadamin.testgradle/aryan.mohammadamin.testgradle.ActivityMain}: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                                 at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                 at android.os.Looper.loop(Looper.java:148)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                              Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
                                                                                 at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
                                                                                 at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
                                                                                 at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
                                                                                 at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
                                                                                 at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
                                                                                 at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
                                                                                 at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
                                                                                 at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
                                                                                 at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
                                                                                 at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:709)
                                                                                 at aryan.mohammadamin.testgradle.ActivityMain.onCreate(ActivityMain.java:24)
                                                                                 at android.app.Activity.performCreate(Activity.java:6237)
                                                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                                 at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                 at android.os.Looper.loop(Looper.java:148) 
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

خواهش میکنم کمکم کنید.

با تشکر.

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
amirhossein1376  8 سال پیش
+2 0

اگه targetSdkVersion شما روی 23 (اندروید 6) باشه توی فایل گریدل باید پرمیشن مربوطه رو runtime بگیرید یعنی از اندروید 6 به بعد برای یه سری پرمیشن ها مثل نوشتن روی کارت حافظه و یا خوندن مخاطب ها باید موقع اجرای برنامه هم این پرمیشن دریافت بشه برای اینکار کد زیر رو قبل از ایجاد فایل و بعد setContentView اضافه کنید

---------------------------------------------------------------ویرایش

البته ساده تر اینه که فعلا میتونید targetSdkVersion رو روی 22 ست کنید تا فعلا مشکلی پیش نیاد ولی موقع ریلیز برنامه باید همین کارو بکنید

 

String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
final int REQUEST_CODE_ASK_PERMISSION = 123;
int hasReadContactsPermission =
ContextCompat.checkSelfPermission(MainActivity.this, permissions[0]);
if (hasReadContactsPermission != PackageManager.PERMISSION_GRANTED) {
if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_CONTACTS)) {
ActivityCompat.requestPermissions(MainActivity.this, permissions, REQUEST_CODE_ASK_PERMISSION);
return;
}
}

ActivityCompat.requestPermissions(MainActivity.this, permissions, REQUEST_CODE_ASK_PERMISSION);

0 0
این رو چطوری باید انجام بدم؟....وقتی از این کد استفاده می کنم خطا می ده (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .