بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

کرش اپلیکیشن کتاب

مدیریت گفتگو
esiii 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام به همه دوستان

من دارم یه کتاب می نویسم و برنامه بدون خطا اجرا میشه و یه دکمه گذاشتم برای تست اینکه بانک اطلاعاتی درست کار می کنه یا و طبق آموزش ویدئویی سایت سورس باران همه چیز رو درست انجام دادم . فقط نمی دون چرا موقعه ای که روی دکمه کلیک می کنم برنامه کرش می کنه...فکر می کنم در واقع نمی تونه دیتابیس رو باز کنه و شاید اصلا پیداش نمی کنه ... ممنون میشم راهنمایی کنید.

اسم دیتابیس هست 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;
}
}

نظرات

Hassan94 10 سال پیش
یه بار سورس خودش رو با سورس خودت مقایسه کن، پروژه کتاب به روش سورس باران یکم گیج کنندس کیفیت ویدیوش هم پایینه، بهتره به روشی که استاد میگه بری راحت تره
esiii 10 سال پیش
ممنون دوست عزیز در خط های برنامه اروری وجود نداره و من بارها و بارها همه چیز رو چک کردم روشی که استاد میگه با دیتابیس نیست و کامل نیست
Hassan94 10 سال پیش
این قسمت دوم ویدیو هستش منم چند ماه پیش داشتم همین آموزش رو میدیم، برو ویدیو های بعدی رو ببین از اونجا به بعد آموزش ساخت کتاب شروع میشه این ویدیو تست دیتابیسه، ویدیو های بعد کلاس MainActivity تغییر میکنه
esiii 10 سال پیش
خب الان که دیتا بیس کار نمی کنه اونجا کار می کنه؟!!
Hassan94 10 سال پیش
راستی اگه بخوای من یه سورس کتاب عالی دارم اگه بخوای میفرشم، همه چیز داره لیست علاقه مندی، جستجو= در متن و تو عنوان، با دیتابیس هم هستش، تنظیمات هم داره، کلا راحتت کنم سورس خوبیه، و اینکه تمام قسمت کد رو میفهمی چطوری هستش، که توضیحات هم تو سورس داره، مثلا این کد چیکار میکنه و...
esiii 10 سال پیش
ایجا انگار همه تو کار فروشن!!!!! راستش من دوسن داشتم کمک برای رفع مشکل کنید
Hassan94 10 سال پیش
هستش باید خوب دقت کنی تو ویدیو، من فقط واسه پیشرفت سریع تو قسمت کتاب نوشتن، گفتم یه سورس کامل دارم تا زیاد تو کتاب گیر نکنی خودم واسه نوشتن کتاب چند ماه وقت تلف کردم تا تونستم یه سورس خوب واسه خودم بنویسم. بنظرم ویدیو سورس باران رو چندتا برو جلو بعدش دستت میادش
esiii 10 سال پیش
اوکی ممنون داداش
esiii 10 سال پیش
روشی که استاد میگه خیلی کلیه و سرچ و علاقه مندی و تنظیمات نداره
زهرا رئیسی 10 سال پیش
اگه میشه یه عکس از log خودتون بزارین

پاسخ‌ها 6

esiii 10 سال پیش

یه پروژه دیگه ساختم  و اسمشو گذاشتم Tbook و این لوگ هم از همین پروژه هست و هنوز کرش می کنه

نظرات

esiii 10 سال پیش
لوگ رو قبلا پاک کردم و یه پروژه جدید ساختم به اسم samplebook و همه چیز رو داخلش کپی کردم و اسم پکیج و همه چیز رو تنظیم کردم
صادقی راد 10 سال پیش
سلام , ممکن هست که پرمیشن مربوط به نوشتن داخل حافظه رو در منیفست تعریف نکرده باشین !
esiii 10 سال پیش
در این مورد در ویدنو چیزی نبود میشه بیشتر و کاملتر راهنمایی کنید
Hossein Lamei Ramandi 10 سال پیش
میگه تیبلی بنام اندروید متا دیتا وجود ندارد خطاش همینه
esiii 10 سال پیش
ممنون . خب ندارم .چیزیم پیدا نکردم در این مورد. چطوری باید درستش کنم؟؟؟
Hossein Lamei Ramandi 10 سال پیش
خوب وقتی در کرسر میخوای دستور رو وارد کنی باید نام تیبلی که داری رو وارد کنی چیزی که نیست !
esiii 10 سال پیش

نظرات

زهرا رئیسی 10 سال پیش

به جای کد بالا تو دیتا بیستون این کدا رو بزارین در ضمن ویدئوی دیتا بیس استاد را حتما ببینید

 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"/>
.

نظرات

esiii 10 سال پیش

ممنون از راهنمایی ولی الان اصلا برنامه run نمی شه؟؟!!!

البته من قسمت سوم ویدنو هم نگاه کردم و کلاس  season  هم ساختم

کلاس ها رو هم تو manifest معرفی کردم به همراه کدی که زهرا خانم داده بودن ریپلیس کردم و باز تو  manifeast گذاشتم

نظرات

esiii 10 سال پیش

دوستان، اساتید محترم لطفا کمک کنید!

استاد فاجانی راهنمایی کنید!

دو روزه گیر افتادم!!!

باز هم برنامه کرش می کنه؟؟؟؟؟!!!!!

کلاس 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();
}
}

نظرات

esiii 10 سال پیش
ممنون خب من اسم تیبلم database هست ! ایراد رو چجوری درستش کنم؟
Hossein Lamei Ramandi 10 سال پیش
مطنئنید که آدرس فایل رو درست وارد کردید و اینکه من احساس میکنم که دیتابیس شما اول یه چیز دیگه بوده و بعد اونو تغییر دادی ببینید اگر اینطوره باید برید دیتابیس قبلی که در حافضه موبایل وجود داره رو پاک کنید تا دیتابیس جدید کپی بشه
esiii 10 سال پیش
ممنون دوست عزیز ، چطوری باید دیتابیس قبلی رو از حافظه موبایل پاک کنم؟
Hossein Lamei Ramandi 10 سال پیش
در اس دی کارد موبایل به پوشه database-test1 بروید و فایل های درون این پوشه رو پاک کنید
esiii 10 سال پیش
ممنون دوست عزیز ولی درست نشد!
Hossein Lamei Ramandi 10 سال پیش
دادا اگه مشکلی نداری و اگه میخوای پروزتو واسم بفرست چک کنم
esiii 10 سال پیش

هوراااااااااااااااااااااااااااااااااااااااااااا درست شد

ممنون از همه دوستان و اساتید محترم

یعنی سوتی داده بودم در حد لا لیگاااااا  خخخخخخخخخخخ

این خط از کد کامنت بوده اون موقع تا حالا خخخخخخ

 //  public final String   path = "data/data/pakagename/databases/";

حالا مشکل بعدی اینه که حروف رو داره جدا از هم نمایش میده!!؟؟

نظرات

Hossein Lamei Ramandi 10 سال پیش
این بخاطر امولیتوره توی گوشی درست نمایش داده میشه
esiii 10 سال پیش
ممنون امیر خان خیلی زحمت کشیدی برای راهنمایی ها
amirhossein1376 10 سال پیش
شاید بهتر باشه برای تشکر رو علامتی که جلوی کامنته کلیک کنیم:دی

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