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

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

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

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

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

کد دیتابیس :

 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);
				
			}
		});
		
	}

}

 

 

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

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

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

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

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


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