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

عدم کپی شدن دیتابیس در SDCard

مدیریت گفتگو
محمد نمازی 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام دوستان خسته نباشید !!

یه پروژه ی کتاب رو واسه تست در حال نوشتن هستم، در بخش دیتابیس نمی دونم چرا فایل دیتابیس رو در محل گفته شده کپی نمیکنه و برنامه کرش میکنه !!

کد دیتابیس :

 package ir.mnamazi.mollanasrodin.app;

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 path = DIR_SDCARD + "/mollanasrodin/database";
	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) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub
		
	}
	
	
	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);
		
	}
	
	public void close(){
		mydb.close();
	}
	
	public boolean checkdb(){
		
		SQLiteDatabase db=null;
		try{	
		db=SQLiteDatabase.openDatabase(path+Name, null, SQLiteDatabase.OPEN_READONLY);
		}
		catch(SQLException e)
		{

		}
		//mydb.close();
		return db !=null ? true:false ;
		
	}
	
	public void copydatabase() throws IOException{

		OutputStream myOutput = new FileOutputStream(path+Name);
		byte[] buffer = new byte[1024];
		int length;
		InputStream myInput = mycontext.getAssets().open(Name);
		while ((length = myInput.read(buffer)) > 0) {
		myOutput.write(buffer, 0, length);
		}
		myInput.close();
		myOutput.flush();
		myOutput.close();
	}

	public String Display (int row, int field, String table){
		Cursor cu = mydb.rawQuery("select * from "+table, null);
		cu.moveToPosition(row);
		String s = cu.getString(field);
		return s;
	}


	public Integer count(String table,String field){
		
		Cursor cu=mydb.rawQuery("select * from "+table+" group by "+field, null);
		int s=cu.getCount();
		return s;
	}

}

خطای نمایش داده شده در Logcat :

12-31 21:09:51.302: E/Trace(1484): error opening trace file: No such file or directory (2)
12-31 21:09:51.594: D/dalvikvm(1484): newInstance failed: no ()
12-31 21:09:51.598: D/AndroidRuntime(1484): Shutting down VM
12-31 21:09:51.598: W/dalvikvm(1484): threadid=1: thread exiting with uncaught exception (group=0xa6195908)
12-31 21:09:51.602: E/AndroidRuntime(1484): FATAL EXCEPTION: main
12-31 21:09:51.602: E/AndroidRuntime(1484): java.lang.RuntimeException: Unable to instantiate application ir.mnamazi.mollanasrodin.app.database: java.lang.InstantiationException: can't instantiate class ir.mnamazi.mollanasrodin.app.database; no empty constructor

 کد اکتیویتی :

 package ir.mnamazi.mollanasrodin.app;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

@SuppressWarnings("unused")
public class Main_book extends ActionBarActivity {

	
	private database db;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_book);
		
		Button btn = (Button) findViewById(R.id.button1);
		
		db = new database(this);
		db.useable();
		
		
		
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				db.open();
				
				//String s = db.Display(19, 2, "content");
				//Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

				int s = db.count("content", "title");
				Toast.makeText(getApplicationContext(), s+"", Toast.LENGTH_SHORT).show();
				
				//Intent i = new Intent(Main_book.this, list_story.class);
				//startActivity(i);
				 
				db.close();
				
				//Intent i = new Intent(Main_book.this, list_story.class);
				//startActivity(i);
				
			}
		});
		
	}

}

 

 

نظرات

Rabbit 11 سال پیش
بهتر نبود خطی که کرش میکنه رو پیدا میکردی تا توقع داشته باشی ما کل کد شما رو بخونیم و کامپایل کنیم و ارور رو متوجه بشیم کجاست و تازه ببینیم میتونیم کمک کنیم یا نه؟ هر کسی بخواد پاسخ بده به محض دیدن کد ها نظرش رو عوض میکنه.
MeY3am 11 سال پیش
لطفأ، خواهشأ، خواهش میکنم که از عنوان مناسب برای سئوالتون استفاده کنید!
سامان پاپی 11 سال پیش
به هر اندازه که به قوانین توجه نکنید به سوال شما توجه نخواهد شد (نوشته استاد در راهنما سایت )
محمد نمازی 11 سال پیش
کسی دیگه انتقادی، حرفی، حدیثی، نظری نداره !!؟!!؟!؟!
Spirit 11 سال پیش
چرا من دارم D: ، کدهای activity رو برگردونید سرجاش نگاه کنم.
محمد نمازی 11 سال پیش
@Spirit این درخواست هم انجام شد، نظر، سوال، انتقاد و درخواست دیگه ای نبود :دی ؟؟!؟!؟!
Spirit 11 سال پیش
دقیقا متوجه نشدم، ولی تا کنون ندیدم که از کلاس SQLiteOpenHelper برای خوندن دیتابیس توی SD Card استفاده بشه، شما باید طبق این لینک پیش برید - حالا بعدش باید ببینیم چی میشه :)
Criss 11 سال پیش
دوستان اینجا یک انجمن تخصصی هست و قراره که همگی از مطالب استفاده کنیم < الان من این تاپیک رو خوندم < الان دقیقا مشکل چطور رفع شد ؟ اصلا مشکل چی بود ؟ این تاپیک اگه اینجوبی بمونه که با اسپم فرقی نمیکنه ! < لطفا توی پست بعدی نتیجه رو بنویسید که مشکل چی بوده و چطور رفع شده < که همگی استفاده کنیم < خیلی ممنون
محمد نمازی 11 سال پیش
متاسفانه انجمن اصلا مدیریت نداره و پاسخ این سوالم رو به سختی از طریق پیام خصوصی یکی از دوستان پیدا کردم و لطف کردن کمک کردن، اما الان باز یه مشکل دیگه دارم که در این لینک کسی هنوز جواب مناسب و کارآمد به من نداده .

پاسخ‌ها 1

محمد نمازی 11 سال پیش

درود، خسته نباشید !!

بطور اتفاقی برنامه ام رو روی گوشی HTC Wildfire اجرا کردم، دیدم به محض باز کردن برنامه، فورز کلوز میده و کرش میکنه !!

بعد دیدم دیتابیس اصلا روی گوشی کپی نشده، قبلا هم با Note 8.0 برنامه ام رو تست میکردم و مشکلی نداشتم !!

چطور میتونم مشکل رو حل کنم !؟!؟

نظرات


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