【问题标题】:Unable to get data from populated sqlite database in asset folder无法从资产文件夹中填充的 sqlite 数据库中获取数据
【发布时间】:2020-05-29 10:03:03
【问题描述】:

错误是当我在模拟器上运行我的代码时,应用程序停止并出现错误(java.lang.RuntimeException:无法启动活动: java.lang.NullPointerException:在代码@987654321 中尝试在空对象引用上调用虚拟方法'java.io.File android.content.Context.getDatabasePath(java.lang.String)' @

我的片段

public class FragmentHome extends Fragment {
    private List<ItemRecipe> itemList = new ArrayList<>();
    private RecyclerView recyclerView;
    private RecipeAdapter mAdapter;
    private AppCompatActivity appCompatActivity;
    databaseHelper db = new databaseHelper(getActivity());

    public FragmentHome() {
        setHasOptionsMenu(true);
    }

    public void onCreate(Bundle a) {
        super.onCreate(a);
        setHasOptionsMenu(true);
    }

sqldatabasehelper

public class databaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "recipes.db";
    public static final String DATABASE_location = Environment.getDataDirectory()+"data/com.recipes.cook/databases/";
private Context mcontext ;
private SQLiteDatabase mdatabase;



    public databaseHelper( Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }


    public  void openDatabase(){

String dbpath =mcontext.getDatabasePath(DATABASE_NAME).getPath();
if (mdatabase != null && mdatabase.isOpen()){
    return;
}
mdatabase=SQLiteDatabase.openDatabase(dbpath,null,SQLiteDatabase.OPEN_READWRITE);


    }


public void closeDatabase() {

    if (mdatabase != null) {

        mdatabase.close();
    }
}



    public ArrayList<ItemRecipe> get_all_name (){
        ItemRecipe itemRecipe=null;
  ArrayList<ItemRecipe> recipslist=new ArrayList<>();
openDatabase();
        Cursor res = mdatabase.rawQuery("select * from recipes",null);
        res.moveToFirst();
        while(!res.isAfterLast()){
           String recipe =res.getString(res.getColumnIndex("name"));
           String img=res.getString(res.getColumnIndex("image"));
           String time = res.getString(res.getColumnIndex("time"));
            int rating = res.getInt(res.getColumnIndex("rating"));

res.moveToNext();
            recipslist.add(

                    new ItemRecipe(

recipe,img,time,rating
                    )


            );

        }

        res.close();
        closeDatabase();
        return recipslist;


        }

【问题讨论】:

    标签: java android database sqlite


    【解决方案1】:

    当您调用 getActivity() 方法时,它返回 null,因为该片段尚未附加。在onCreate 中打开数据库。

    public class FragmentHome extends Fragment {
        private List<ItemRecipe> itemList = new ArrayList<>();
        private RecyclerView recyclerView;
        private RecipeAdapter mAdapter;
        private AppCompatActivity appCompatActivity;
    
        public FragmentHome() {
            setHasOptionsMenu(true);
        }
    
        public void onCreate(Bundle a) {
            super.onCreate(a);
            setHasOptionsMenu(true);
            databaseHelper db = new databaseHelper(getActivity());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2018-05-28
      相关资源
      最近更新 更多