کرش اپلیکیشن کتاب
سلام به همه دوستان
من دارم یه کتاب می نویسم و برنامه بدون خطا اجرا میشه و یه دکمه گذاشتم برای تست اینکه بانک اطلاعاتی درست کار می کنه یا و طبق آموزش ویدئویی سایت سورس باران همه چیز رو درست انجام دادم . فقط نمی دون چرا موقعه ای که روی دکمه کلیک می کنم برنامه کرش می کنه...فکر می کنم در واقع نمی تونه دیتابیس رو باز کنه و شاید اصلا پیداش نمی کنه ... ممنون میشم راهنمایی کنید.
اسم دیتابیس هست database.db
سورس کلاس BookActivity.java :
package esi.bokk;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class BookActivity extends Activity {
private database db;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = new database(this);
db.useable();
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
db.open();
String str = db.namayesh(0, 1, "contenets");
Toast.makeText(BookActivity.this, str, Toast.LENGTH_SHORT).show();
db.close();
}
});
}
}
سورس کلاس database :
package esi.bokk;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class database extends SQLiteOpenHelper {
public final String path = "data/data/esi.testbook/databases/";
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_READONLY);
}
@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;
}
}
به جای کد بالا تو دیتا بیستون این کدا رو بزارین در ضمن ویدئوی دیتا بیس استاد را حتما ببینید
public class DataBase extends SQLiteOpenHelper {
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();//این مسیر جدید رو بهش بدید
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test1/";
// public final String path = "data/data/pakagename/databases/";
public final String Name = "dbname";//نام دیتا بیس
public SQLiteDatabase mydb;
private final Context mycontext;
public DataBase(Context context) {
super(context, "dbhobby", 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(DIR_DATABASE + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(DIR_DATABASE + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copydatabase() throws IOException {
new File(DIR_DATABASE).mkdirs();
OutputStream myOutput = new FileOutputStream(DIR_DATABASE + 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();
}
تو منیفست این تکه کد را اضافه مکنید
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
.
دوستان، اساتید محترم لطفا کمک کنید!
استاد فاجانی راهنمایی کنید!
دو روزه گیر افتادم!!!
باز هم برنامه کرش می کنه؟؟؟؟؟!!!!!
کلاس TbookActivity
package esi.tbook;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class TbookActivity extends Activity {
private database db;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = new database(this);
db.useable();
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(TbookActivity.this, seasones.class);
TbookActivity.this.startActivity(intent);
}
});
}
}
کلاس database
package esi.tbook;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
public class database extends SQLiteOpenHelper {
public static final String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath(); //این مسیر جدید رو بهش بدید
public static final String DIR_DATABASE = DIR_SDCARD + "/database-test1/";
// public final String path = "data/data/pakagename/databases/";
public final String Name = "database"; //نام دیتا بیس
public SQLiteDatabase mydb;
private final Context mycontext;
public database(Context context) {
super(context, "database", 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(DIR_DATABASE + Name, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public void close() {
mydb.close();
}
public boolean checkdb() {
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(DIR_DATABASE + Name, null, SQLiteDatabase.OPEN_READONLY);
}
catch (SQLException e) {
}
return db != null ? true : false;
}
public void copyDatabase() throws IOException {
new File(DIR_DATABASE).mkdirs();
OutputStream myOutput = new FileOutputStream(DIR_DATABASE + 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;
}
public Integer shomaresh_field(String table, String field) {
Cursor Cursor = mydb.rawQuery("SELECT * FROM " + table + " group by " + field, null);
int i = Cursor.getCount();
return i;
}
public String namayesh_field(String table, int row) {
Cursor Cursor = mydb.rawQuery("SELECT * FROM " + table + " group by season", null);
Cursor.moveToPosition(row);
String s = Cursor.getString(4);
return s;
}
public Integer shomaresh_dastan(String table, String season) {
Cursor Cursor = mydb.rawQuery("SELECT * FROM " + table + " where seasone='" + season + "' group by name", null);
int s = Cursor.getCount();
return s;
}
}
کلاس seasones
package esi.tbook;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class seasones extends ListActivity {
private database db;
private String[] Name;
private String[] Tedad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.seasone);
db = new database(this);
refresher();
setListAdapter(new AA());
}
class AA extends ArrayAdapter<String> {
public AA() {
super(seasones.this, R.layout.row_seasones, Name);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater in = getLayoutInflater();
View row = in.inflate(R.layout.row_seasones, parent, false);
TextView name = (TextView) row.findViewById(R.id.name_seasones);
TextView tedad = (TextView) row.findViewById(R.id.tedad_seasones);
name.setText(Name[position]);
tedad.setText(Tedad[position]);
return (row);
}
}
private void refresher() {
db.open();
int save = db.shomaresh_field("database", "seasone");
Name = new String[save];
Tedad = new String[save];
for (int i = 0; i < save; i++) {
Name[i] = db.namayesh_field("database", i);
Tedad[i] = db.shomaresh_dastan("database", Name[i].toString()) + "";
}
db.close();
}
}
هوراااااااااااااااااااااااااااااااااااااااااااا درست شد
ممنون از همه دوستان و اساتید محترم
یعنی سوتی داده بودم در حد لا لیگاااااا خخخخخخخخخخخ
این خط از کد کامنت بوده اون موقع تا حالا خخخخخخ
// public final String path = "data/data/pakagename/databases/";
حالا مشکل بعدی اینه که حروف رو داره جدا از هم نمایش میده!!؟؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .




