- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我查看了上下文信息,它在 Activity 组的已知间接子类中说,“此类已弃用。请改用新的 Fragment 和 FragmentManager API” 那么为什么下面的代码在我的类中不起作用扩展 ListFragment?当我在我的类中尝试扩展 Activity 虽然它有效时(它应该因为它在已知的间接子类中)。我需要做什么才能打开数据库并获取 AFragmentTab 中的信息?在此先感谢您,如果可能请提供邮政编码。
DataBaseHelper 类:
public class DataBaseHelper extends SQLiteOpenHelper{
private static String DB_PATH = "/data/data/com.example.alotoftesting/databases/";
private static String DB_NAME = "library1_dev.db";
private SQLiteDatabase myDataBase;
private final Context myContext;
Cursor cursor;
public DataBaseHelper(Context c){
super(c, DB_NAME, null, 1);
this.myContext = c;
}
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing since the database already exist.
System.out.println("Database Exist");
}
else{
System.out.println("2.5");
this.getReadableDatabase();
try{
System.out.println("3.");
copyDataBase();
System.out.println("We just copied the database.");
}catch(IOException e){
throw new Error("Error Copying Database");
}
}
}
private boolean checkDataBase(){
SQLiteDatabase checkDB = null;
System.out.println("1.");
try{
String myPath = DB_PATH + DB_NAME;
System.out.println("2.");
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
System.out.println("We are in here");
}catch(SQLiteException e){
//database doesn't exist yet.
}
if(checkDB != null){
checkDB.close();
System.out.println("Database Closed");
}
return checkDB != null ? true : false;
}
private void copyDataBase()throws IOException{
//Opens your local db as the input stream.
InputStream myInput = myContext.getAssets().open(DB_NAME);
//Path to the just created empty DB.
String outFileName = DB_PATH + DB_NAME;
//Opens the empty DB as the output stream.
OutputStream myOutput = new FileOutputStream(outFileName);
//transfer bytes from the inputfile to the outputfiles.
byte[] buffer = new byte[1024];
int length;
while((length = myInput.read(buffer)) > 0){
myOutput.write(buffer, 0, length);
}
//Close the Streams.
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDatabase() throws SQLException{
//Open the database.
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}
public void closeDatabase() throws SQLException{
//Close the database.
myDataBase.close();
}
public ArrayList<String> getTableColumn(String tableName, String[] column){
ArrayList<String> aL = new ArrayList<String>();
cursor = myDataBase.query(tableName, column, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
aL.add(cursor.getString(0));
cursor.moveToNext();
}
System.out.println(aL);
cursor.close();
return aL;
}
@Override
public void onCreate(SQLiteDatabase db){
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
}
我想打开数据库的类,AFragmentTab类:
public class AFragmentTab extends ListFragment{
DataBaseHelper myDB;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
myDB = new DataBaseHelper(this); //<------The error is here.
}
}
最佳答案
Fragment
不扩展 Activity
并间接扩展 Context
。所以改变你的代码如下:
myDB = new DataBaseHelper(getActivity());
getActivity() 方法返回您的 fragment 所附加的 Activity 的引用,从而提供传递上下文的解决方案。
关于android - DataBaseHelper 没有获取 ListFragment 的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229434/
引用this链接,如果只有一个连接,什么时候关闭连接比较合适?我有一个服务一直在后台运行。什么时候调用 close() 函数比较合适?有什么建议吗? 最佳答案 您实际上不必调用 close()。例如,
关于这个主题有几个问题,但没有一个给出明确的理由说明为什么应该或不应该有一个或多个 databaseHelper 实例。什么时候拥有多个 DatabaseHelper 实例是个好主意,什么时候不是。复
也许我遗漏了一些东西,但我的问题是:我可以从代码的不同点访问数据库,每个代码点都使用自己的 DatabaseHelper 实例吗?还是拥有一个可从任何地方(线程、 Activity 等)访问的独特的全
大家好,我一直在开发一个简单的 Chronometer 应用程序,该应用程序将单圈时间存储在数据库中。我创建了一个数据库助手类。当我尝试从我的 Activity 中插入数据时,我收到一条错误消息,指出
我需要将一些默认数据存入数据库。我在我的数据库助手中制作了方法: private void putDefaultList(SQLiteDatabase db){ String nazwaa =
大家好我被困在一个点上,问题是我有下面显示的三个类,我想在 AsyncTask 类中实例化我的 DatabaseHelper 类。你能帮忙吗,我怎样才能在 AsyncTask 类中获取上下文? 问题已
我有一个安卓应用程序,通过按下按钮从服务器同步数据。但是我需要按钮出现在应用程序的所有 Activity 中,所以我决定将 updateTask 作为独立类。 在 updateTask 中,我下载了一
我一直在研究一种在 Activity 之间传递引用到我的 DataBaseHelper 类的方法。我不想在每个新 Activity 中重新创建 DataBaseHelper 的新实例。据我所知,最好的
我正在主 Activity 的 onCreate() 中创建 DBHelper 类的实例。 databaseHelper = new DatabaseHelper(getBaseContext())
我查看了上下文信息,它在 Activity 组的已知间接子类中说,“此类已弃用。请改用新的 Fragment 和 FragmentManager API” 那么为什么下面的代码在我的类中不起作用扩展
我正在尝试使用 OrmLite 保存我的数据。在这个例子中有这个类: package com.example.helloandroid; import java.sql.SQLException; i
我想在我的 Activity 中对 Order 对象调用 CRUD 操作。我想知道以下“服务”类的实现是否是执行此操作的好方法?我不希望在我的 Activity 代码中引用 DatabaseHelpe
我有一个 Activity 使用 AsyncTask 下载一些数据并将其保存到数据库中。要打开数据库,我们需要将 Context 参数传递给 SQLiteOpenHelper 的 onCreate 方
数据库帮助.java package com.example.abc2; import java.io.FileOutputStream; import java.io.IOException; im
根据 ORMLite 文档,所有创建的 Dao 对象都缓存在 DaoManager 中。但是在 ORMLite 中 examples ,我看到 Dao 类再次缓存在 DatabaseHelper 类中
我有一个数据库助手类(下面的代码)。这个助手的类任务是将数据库从我的应用程序附带的 Assets 文件夹复制到我的应用程序的 data\data... 中,以便我可以使用它。 一旦我将数据库放入数据\
您好,我在运行时使用 Android Studio 时遇到此错误,但仅限于 SDK 版本 1.3.0 sdk版本:compileSdkVersion 19 > 23 应用程序兼容性:com.andr
DatabaeHelper.class 这是一个普通类。但我无法插入值并从数据库中取回数据。 public class DatabaseHelper extends SQLiteOp
我在阅读Android 2.2默认启动器的源代码时遇到了一个问题。 LauncherProvider.DatabaseHelper源码段: @Override public void onCreate
我是一名优秀的程序员,十分优秀!