o0o0okay
جمعه 25 مهر 1393, 17:43 عصر
سلام
من توی تعریف و اتصال دیتابیس (SQLite) در محیط برنامه نویسی Android Studio به مشکل برخوردم.
یه اموزش ویدیویی، ساخت کتاب اندروید هست، که من با اون داشتم جلو میرفتم اما همون اول کاری به مشگل برخوردم.
(اموزشهای ویدیویی بر اساس محیط اکلیپس هست، من دارم با اندروید استدیو کد مینویسم)
وقتی برنامه رو توی جیمولیش بالا میارم، روی Button کلیک میکنم، کرش میکنه میاد بیرون.
ما یه دیتابیس درست میکنیم که دارای 6تا فیلد
جدول = database
تیبل = contents
ID = INTEGER
name = TEXT
page = INTEGER
text = TEXT
season = TEXT
star = INTEGER
DatabasesActivity.java
public class MainActivity extends Activity {
private database db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = new database(this);
db.useable();
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
db.open();
String str = db.namayesh(0, 1, "contents");
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
db.close();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
DBAdapter.java
public class database extends SQLiteOpenHelper {
public final String path = "data/data/com.saeed.ebook/database/";
public final String Name = "database";
public SQLiteDatabase mydb;
private final Context mycontext;
public database(Context context) {
super(context, "databases", null, 1);
mycontext = context;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public void useable() {
boolean checkdb = checkdb();
if (checkdb) {
} else {
this.getReadableDatabase();
try {
copydatabase();
}
catch (IOException e) {
}
}
}
public void open() {
mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(Name);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
public String namayesh(int row , int field , String table){
android.database.Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table , null);
Cursor.moveToPosition(row);
String str = Cursor.getString(field);
return str;
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn"
android:id="@+id/btn"
android:layout_marginTop="67dp"
android:layout_gravity="center_horizontal" />
</LinearLayout>
من یبار پوشه assets رو زیر مجموعه main گذاشتم، کرش کرد، یبارم زیر مجوعه app گذاشتم که بازم کرش کرد.
اگه اطلاعات کمه بگید بزارم.
ممنون میشم اگه زود جواب بدید :قلب:
من توی تعریف و اتصال دیتابیس (SQLite) در محیط برنامه نویسی Android Studio به مشکل برخوردم.
یه اموزش ویدیویی، ساخت کتاب اندروید هست، که من با اون داشتم جلو میرفتم اما همون اول کاری به مشگل برخوردم.
(اموزشهای ویدیویی بر اساس محیط اکلیپس هست، من دارم با اندروید استدیو کد مینویسم)
وقتی برنامه رو توی جیمولیش بالا میارم، روی Button کلیک میکنم، کرش میکنه میاد بیرون.
ما یه دیتابیس درست میکنیم که دارای 6تا فیلد
جدول = database
تیبل = contents
ID = INTEGER
name = TEXT
page = INTEGER
text = TEXT
season = TEXT
star = INTEGER
DatabasesActivity.java
public class MainActivity extends Activity {
private database db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = new database(this);
db.useable();
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
db.open();
String str = db.namayesh(0, 1, "contents");
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
db.close();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
DBAdapter.java
public class database extends SQLiteOpenHelper {
public final String path = "data/data/com.saeed.ebook/database/";
public final String Name = "database";
public SQLiteDatabase mydb;
private final Context mycontext;
public database(Context context) {
super(context, "databases", null, 1);
mycontext = context;
}
@Override
public void onCreate(SQLiteDatabase arg0) {
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
public void useable() {
boolean checkdb = checkdb();
if (checkdb) {
} else {
this.getReadableDatabase();
try {
copydatabase();
}
catch (IOException e) {
}
}
}
public void open() {
mydb = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copydatabase() throws IOException {
OutputStream myOutput = new FileOutputStream(path + Name);
byte[] buffer = new byte[1024];
int lenght;
InputStream myInput = mycontext.getAssets().open(Name);
while ((lenght = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, lenght);
}
myInput.close();
myOutput.flush();
myOutput.close();
}
public String namayesh(int row , int field , String table){
android.database.Cursor Cursor = mydb.rawQuery("SELECT * FROM "+table , null);
Cursor.moveToPosition(row);
String str = Cursor.getString(field);
return str;
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn"
android:id="@+id/btn"
android:layout_marginTop="67dp"
android:layout_gravity="center_horizontal" />
</LinearLayout>
من یبار پوشه assets رو زیر مجموعه main گذاشتم، کرش کرد، یبارم زیر مجوعه app گذاشتم که بازم کرش کرد.
اگه اطلاعات کمه بگید بزارم.
ممنون میشم اگه زود جواب بدید :قلب: