?باز نشد؟؟
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
مشکل در ایجاد دیتابیس {عین کد استاد}{مگه میشه}
مدیریت گفتگو
آخرین تغییر: 9 سال پیش
برای ایجاد دیتابیس عین استاد کد میزنم ولی ایجاد نمیشه؟
package sm.example.asss;
import java.io.File;
import android.R.string;
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
public class G extends Application {
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/databese-test/";
@Override
public void onCreate() {
super.onCreate();
context=this.getApplicationContext();
new File(DIR_DATABASE).mkdir();
database.openOrCreateDatabase(DIR_DATABASE+ "/database.sqlite", null);
}
}
پاسخها 4
- شما باید از mkdirs() استفاده کنید
- به جای نوشتن این خط :
database.openOrCreateDatabase(DIR_DATABASE+"/database.sqlite",null);
باید از این خط استفاده کنید:
database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE+"/database.sqlite", null);
نظرات
این ارور لوگ هست
08-24 11:46:52.877: E/memtrack(2174): Couldn't load memtrack module (No such file or directory)
08-24 11:46:52.877: E/android.os.Debug(2174): failed to load memtrack module: -2
08-24 11:46:53.833: E/cutils-trace(2195): Error opening trace file: No such file or directory (2)
08-24 11:46:53.873: E/memtrack(2195): Couldn't load memtrack module (No such file or directory)
08-24 11:46:53.873: E/android.os.Debug(2195): failed to load memtrack module: -2
08-24 11:46:54.293: E/OpenGLRenderer(2206): Getting MAX_TEXTURE_SIZE from GradienCache
08-24 11:46:54.297: E/OpenGLRenderer(2206): MAX_TEXTURE_SIZE: 8192
08-24 11:46:54.305: E/OpenGLRenderer(2206): Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
08-24 11:46:54.305: E/OpenGLRenderer(2206): MAX_TEXTURE_SIZE: 8192
اینم فایل Log
نظرات
هنوز منتظر چشم بر اهم که جوابی برسه
کلاس G رو توی منیفست تعریف کردی؟
منم این مشکلو داشتم البته یادم نیس چه اروری میداد ولی عین کد استادو میزدم جواب نمیداد!!!
شاید باورت نشه ولی فقط یه پروژه جدید باز کردم و همون کد رو کپی پیست کردم درست شد!!!!
کلاس G رو هم معرفی کردم
شاید باورت نشه منم یه پروژه جدید باز کردم نشد (!!!)
هنوز منتظرم
import android.R.string; دقیقا برای چیه ؟؟
؟ ! ؟
جالبه من وقتی کدتون رو با ویرایشاتی که گفته ام امتحان کردم درست کار می کرد.
android:name=".G"----------------------------------------
android:name=".G"--
از این بدشانسی ها منم زیاد داشتم ، با اندروید استادیو امتحان کن !!!!!
؟اندروید استادیو؟؟با این این همه مشکل و مسلئه اون دیگه بین چی به روزگارمون میاره
اگه میتونید فایل لوگ رو گذاشتم بینید گیرش کجاست
آقای محمد حسین کاشی زاده عزیز آیا این سوال منو پاسخ میدهید ؟
من هم همین مشکلو دارم
کلاً فایل دیتا بیس ساخته نمیشه و از خط زیر خطا میگیره:
database= SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE+"/database1.sqlite",null );
نظرات
سلام ، مطمئنید ساخته نمیشه ؟ شاید مسیر فایل ساخته شده رو اشتباه میرید . بالا جواب داده شده که اگه از جنی موشن استفاده میکنید مسیر اینه mnt->shell->emulated->0->yourFile . پاسخ آقا مصطفی رو هم بخونید .
سلام..ممنونم که پاسخ دادی..با اندروید استادیو کارمیکنم..تنظیمات م همونایی که استاد گفتن انجام دادم..توضیح ارور اینه:
E: FATAL EXCEPTION: main
Process: com.hamid.learn.database, PID: 4854
java.lang.RuntimeException: Unable to create application com.android.tools.fd.runtime.BootstrapApplication: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
این مسیری م که گفتید اصلا فولدر shell وجود نداره
تو android device monitor هم یه لاگی انداخته که میگه:
Adb connection Error:An existing connection was forcibly closed by the remote host
خط های بالاتر لاگکت اندروید استادیو :
(14) cannot open file at line 31278 of [2ef4f3a5b1]
E: (14) os_unix.c (2) open(/storage/emulated/0/database-test//database1.SQLite) -
E: Failed to open database '/storage/emulated/0/database-test//database1.SQLite'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
مسیری که گفتم مال genyMotion بود . شما داری از ایمولیتور خود اندروید استفاده میکنی . مسیرش هم خودش گفته : storage/emulated/0/database-test فکر میکنم فایل ساخته شده چون داره میگه فایل فلان در مسیر فلان رو نمیتونه باز کنه ، حالا چرا ... !!!
دقیقاً همین مسیر رو میرم ولی فایلی ساخته نشده..اینم کد کلاسG:
package com.hamid.learn.database;
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import java.io.File;
public class G extends Application {
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test/";
@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
new File(DIR_DATABASE).mkdirs();
database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database1.sqlite", null);
database.execSQL("CREATE TABLE IF NOT EXISTS person " +
" (person_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE" +
" , person_name TEXT, " +
"person_family TEXT," +
" person_age INTEGER)");
database.execSQL("INSERT INTO person (person_name,person_family,person_age) VALUES ('Ali', 'rahimi',20)");
}
}
android manifest :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hamid.learn.database">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:name=".G"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
کلاس G :
package com.hamid.learn.database;
import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import java.io.File;
public class G extends Application {
public static Context context;
public static SQLiteDatabase database;
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test/";
@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
new File(DIR_DATABASE).mkdirs();
database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database1.sqlite", null);
database.execSQL("CREATE TABLE IF NOT EXISTS person " +
" (person_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE" +
" , person_name TEXT, " +
"person_family TEXT," +
" person_age INTEGER)");
database.execSQL("INSERT INTO person (person_name,person_family,person_age) VALUES ('Ali', 'rahimi',20)");
}
}
gradle :
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.hamid.learn.database"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.1.1'
}
gradle project :
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
نظرات
برنامه رو که run میکنم کرش میکنه و لاگایی که بالا گفتم و میندازه و از خط 22 ارور میگیره یعنی این خط:
database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "/database1.sqlite", null);
من همین کدهای شما رو اجرا کردم و فایل ساخته میشه و در sqlite manager نشون داده میشه . اندروید ایمولیتور شما چنده ؟ اگه 6 و یا بالاتره ، باید runtime permission بگیرید .
اندروید ایمولیتور م 6 ... runtime permission چیجوری بگیرم؟
ممنونم مهندس جان از اینکه وقت گذاشتی...منم کد ها رو با اندروید ایمولیتور 4.1 اجرا کردم و فایلها ساخته شد...خیلی عالی بود..باز هم ممنون..فقط اینکه علت ساخته نشدن فولدر با اندروید شش چیه؟؟؟
خب ساختار اندروید در اندروید 6 در بعضی permission ها تغییر کرده ( جهت امنیت بیشتر کاربر ) . لینک رو ببینید توضیح داده .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام

نظرات