我有一个 sqlite 数据库存储在 assets 文件夹中。当我从 assest 文件夹中复制数据库时,它没有复制数据库。大小始终为 0 字节。
这是我的 DBhelper
public class DBhelper extends SQLiteOpenHelper {
private static String DB_NAME = "channels";
private SQLiteDatabase myDataBase;
private DBhelper db;
public Context myContext;
File dbFile;
File dbFilePath;
Cursor ch;
public DBhelper(Context myContext) {
super(myContext, DB_NAME, null, 1);
this.myContext = myContext;
System.out.println("Context value from database helper:--"+myContext);
String state=Environment.getExternalStorageState();
System.out.println("My Storage State:-"+state);
}
public void createDataBase(Context mycontext) throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
System.out.println("Yes Database Exists");
String path = dbFile.getAbsolutePath();
System.out.println("My database Path:--"+path);
}
if(!dbExist)
{
//System.out.println("No Databse Exists so we created Directory:-"+flag);
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
public boolean checkDataBase() {
dbFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"channels");
return dbFile.exists();
}
/*public boolean checkDataBase()
{
dbFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"photodb");
return dbFile.exists();
}*/
private void copyDataBase() throws IOException{
dbFile= new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"NewsFeed");
boolean flag=dbFile.mkdir();
dbFilePath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"NewsFeed"+"/"+"channels");
dbFilePath.createNewFile();
InputStream myInput = myContext.getAssets().open("channels");
String outFileName = dbFilePath.getAbsolutePath();
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
System.out.println("Database copy");
}
public void preservedata() throws IOException{
InputStream myInput = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"NewsFeed"+"/"+"channels") ;
//myContext.getAssets().open("photodb");
String outFileName = dbFilePath.getAbsolutePath();
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0){
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException{
String myPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+"NewsFeed"+"/"+"channels" ;
System.out.println("MY DATABASE PATH:----"+myPath);
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public synchronized void close() {
if(myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
我从 getView 方法的 listviewadapter 类调用数据库
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
final ViewHolder vh;
// View v = view;
System.out.println("My Context Value from India List :-"+context);
if (view == null) {
vh= new ViewHolder();
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.newschannelrow, null,false);
// LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// v = vi.inflate(R.layout.newschannelrow, null);
// vh.textview = new TextView(mycontext);
vh.ivNewsChanIcon = (ImageView)view.findViewById(R.id.ivNewsChanIcon);
vh.tvNameOfChannel = (TextView)view.findViewById(R.id.tvNameOfChannel);
vh.tvNewsFeedLink = (TextView)view.findViewById(R.id.tvNewsFeedLink);
vh.tvNewsFav = (CheckBox)view.findViewById(R.id.tvNameofChannelFav);
vh.tvNewsFav.setTag(i);
view.setTag(vh);
}
else
{
vh = (ViewHolder) view.getTag();
}
NewsFeedLink nfl = data.get(i);
String name = nfl.getChannelName();
String link = nfl.getFeedLink();
vh.tvNameOfChannel.setText(name);
vh.tvNewsFeedLink.setText(link);
//ImageView imageView = new ImageView(mycontext);
// vh.imageView.setImageResource(ImageIds[position]);
// vh.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
// vh.textview.setText(Imagename[position]);
//imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
vh.tvNewsFav.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked==false){
System.out.println("This "+(Integer)buttonView.getTag()+" CheckBox Is un-Clicked");
}
if(isChecked==true){
System.out.println("I am from onCheck Changed in India List context value:-"+context);
mydb = new DBhelper(context);
try {
mydb.createDataBase(context);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mydb.openDataBase();
System.out.println("This "+(Integer)buttonView.getTag()+" CheckBox Is Clicked");
mydb.add((vh.tvNameOfChannel).getText().toString(), (vh.tvNewsFeedLink).getText().toString());
try {
mydb.preservedata();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mydb.close();
}
}
});
return view;
}
请在这方面提供帮助..