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

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

esiii  10 سال پیش  10 سال پیش
0 0

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

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

اسم دیتابیس هست 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;
}
}
0 0
یه بار سورس خودش رو با سورس خودت مقایسه کن، پروژه کتاب به روش سورس باران یکم گیج کنندس کیفیت ویدیوش هم پایینه، بهتره به روشی که استاد میگه بری راحت تره (10 سال پیش)
+1 0
ممنون دوست عزیز در خط های برنامه اروری وجود نداره و من بارها و بارها همه چیز رو چک کردم روشی که استاد میگه با دیتابیس نیست و کامل نیست (10 سال پیش)
0 0
این قسمت دوم ویدیو هستش منم چند ماه پیش داشتم همین آموزش رو میدیم، برو ویدیو های بعدی رو ببین از اونجا به بعد آموزش ساخت کتاب شروع میشه این ویدیو تست دیتابیسه، ویدیو های بعد کلاس MainActivity تغییر میکنه (10 سال پیش)
0 0
خب الان که دیتا بیس کار نمی کنه اونجا کار می کنه؟!! (10 سال پیش)
0 0
راستی اگه بخوای من یه سورس کتاب عالی دارم اگه بخوای میفرشم، همه چیز داره لیست علاقه مندی، جستجو= در متن و تو عنوان، با دیتابیس هم هستش، تنظیمات هم داره، کلا راحتت کنم سورس خوبیه، و اینکه تمام قسمت کد رو میفهمی چطوری هستش، که توضیحات هم تو سورس داره، مثلا این کد چیکار میکنه و... (10 سال پیش)
0 0
ایجا انگار همه تو کار فروشن!!!!! راستش من دوسن داشتم کمک برای رفع مشکل کنید (10 سال پیش)
0 0
روشی که استاد میگه چرا کامل نیست (10 سال پیش)
0 0
هستش باید خوب دقت کنی تو ویدیو، من فقط واسه پیشرفت سریع تو قسمت کتاب نوشتن، گفتم یه سورس کامل دارم تا زیاد تو کتاب گیر نکنی خودم واسه نوشتن کتاب چند ماه وقت تلف کردم تا تونستم یه سورس خوب واسه خودم بنویسم. بنظرم ویدیو سورس باران رو چندتا برو جلو بعدش دستت میادش (10 سال پیش)
0 0
اوکی ممنون داداش (10 سال پیش)
0 0
روشی که استاد میگه خیلی کلیه و سرچ و علاقه مندی و تنظیمات نداره (10 سال پیش)
+1 0
اگه میشه یه عکس از log خودتون بزارین (10 سال پیش)
 برای این سوال 6 پاسخ وجود دارد.
پاسخ به سوال 
esiii  10 سال پیش
0 0

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

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

پاسخ به سوال 
زهرا رئیسی  10 سال پیش
+1 0

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

 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 سال پیش
0 0

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

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

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

پاسخ به سوال 
esiii  10 سال پیش
0 0

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

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

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

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

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

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

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

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

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

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

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

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

+3 0
این بخاطر امولیتوره توی گوشی درست نمایش داده میشه (10 سال پیش)
0 0
ممنون امیر خان خیلی زحمت کشیدی برای راهنمایی ها (10 سال پیش)
+1 0
شاید بهتر باشه برای تشکر رو علامتی که جلوی کامنته کلیک کنیم:دی (10 سال پیش)

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