а проблема есть?

ема в том, что когда я запускаю свой код, приложение останавливается с ошибкой (java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.twixt.pranav.pos / com.twixt.pranav.pos.View.Activity.Cart }: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.io.File android.content.Context.getDatabasePath (java.lang.String)' для нулевой ссылки на объект) в коде, который вы могли видеть, который я вставил одни данные вручную

Я видел похожие вопросы, но не нашел решения

Это мой класс

  class FragmentCart : Fragment() {
    private val database: SQLiteHelper = SQLiteHelper(activity)

     override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
            val mView = inflater!!.inflate(R.layout.fragment_cart, container, false)
     if (database != null) {
                val array_list = database.cartdatas()
                Toast.makeText(activity, "" , Toast.LENGTH_SHORT).show()
            }
 return mView
    }

Sqlite вспомогательный класс

public class SQLiteHelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "POS_SQLiteDatabase.db";

    public SQLiteHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table CATEGORIES (ID INTEGER, NAME VARCHAR, COLOR VARCHAR)");
        db.execSQL("create table CART (ITEM_ID INTEGER, ITEM_NAME VARCHAR, QUANTITY FLOAT, PRICE FLOAT, ONLINE INTEGER, DATE_ VARCHAR, FLAG INTEGER)");

        db.execSQL("insert into CART values(321,'test name',1.1,50,1,'test date',0)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS CATEGORIES");
        db.execSQL("DROP TABLE IF EXISTS CART");
        onCreate(db);
    }

    public  Boolean  insetCartData(int item_id,String item_name,float quantity,float price,int online,String date, String flag){
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        contentValues.put("ITEM_ID",item_id);
        contentValues.put("ITEM_NAME",item_name);
        contentValues.put("QUANTITY",quantity);
        contentValues.put("PRICE",price);
        contentValues.put("ONLINE",online);
        contentValues.put("DATE_",date);
        contentValues.put("FLAG",flag);

        database.insert("CART",null,contentValues);

        return true;
    }

    public ArrayList<String> cartdatas(){
       /* SQLiteDatabase database=this.getReadableDatabase();
        Cursor cursor=database.rawQuery("SELECT * FROM CART where ITEM_ID="+id+"",null);
        return cursor;*/
        ArrayList<String> array_list = new ArrayList<String>();

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor res =  db.rawQuery( "select * from CART", null );
        res.moveToFirst();

        while(res.isAfterLast() == false){
            array_list.add(res.getString(res.getColumnIndex("ITEM_NAME")));
            res.moveToNext();
        }
        return array_list;
    }


}

И ошибка

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.twixt.pranav.pos, PID: 4602
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.twixt.pranav.pos/com.twixt.pranav.pos.View.Activity.Cart}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                      at android.app.ActivityThread.-wrap11(Unknown Source:0)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6494)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference
                      at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:292)
                      at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:262)
                      at com.twixt.pranav.pos.Controller.SQLiteHelper.cartdatas(SQLiteHelper.java:62)
                      at com.twixt.pranav.pos.View.Fragment.FragmentCart.onCreateView(FragmentCart.kt:38)
                      at android.app.Fragment.performCreateView(Fragment.java:2508)
                      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1279)
                      at android.app.FragmentManagerImpl.addAddedFragments(FragmentManager.java:2407)
                      at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2186)
                      at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2142)
                      at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2043)
                      at android.app.FragmentManagerImpl.dispatchMoveToState(FragmentManager.java:3032)
                      at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:2979)
                      at android.app.FragmentController.dispatchActivityCreated(FragmentController.java:178)
                      at android.app.Activity.performCreate(Activity.java:7006)
                      at android.app.Activity.performCreate(Activity.java:6991)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
                      at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
                      at android.os.Handler.dispatchMessage(Handler.java:106) 
                      at android.os.Looper.loop(Looper.java:164) 
                      at android.app.ActivityThread.main(ActivityThread.java:6494) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
Application terminated.
 Raghunandan14 дек. 2017 г., 06:02
private val database: SQLiteHelper = SQLiteHelper(activity) что такое активность здесь и где она инициализируется?
 Ramesh sambu14 дек. 2017 г., 05:55
Не могли бы вы проверить, существует ли база данных в папке вашего приложения с помощью adb или Android Device Monitor? Я предполагаю, что указанная база данных не существует. Вот почему она выдает проблему dbfilepath
 Ramesh sambu14 дек. 2017 г., 05:58
 Pranav Ashok14 дек. 2017 г., 05:57
@ Рамеш Самбу, как я могу это проверить
 cricket_00714 дек. 2017 г., 06:06
Ну, это ноль ... И будет до тех пор, пока Фрагмент не будет присоединен к Деятельности, что не происходит немедленно при создании Фрагмента.

Ответы на вопрос(1)

Решение Вопроса

переданный SQLiteHelper, является нулевым. Вы можете получить контекст действия, когда фрагмент прикреплен к действию.

Проверьте жизненный цикл фрагментаhttps://developer.android.com/guide/components/fragments.html

+ Изменить

private val database: SQLiteHelper = SQLiteHelper(activity)

в

private var database: SQLiteHelper? = null

Переопределить onAttach во фрагменте и инициализировать базу данных

database = SQLiteHelper(activity)

https://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)

 cricket_00714 дек. 2017 г., 06:08
@PranavAshok Это не синтаксис Java ...
 Pranav Ashok14 дек. 2017 г., 06:08
не работает (я использую kotlin, поскольку мой язык программирования не Java)
 Raghunandan14 дек. 2017 г., 06:09
а проблема есть?
 Pranav Ashok14 дек. 2017 г., 06:09
хорошо, это не работает
 Raghunandan14 дек. 2017 г., 06:08
да это имеет смысл

Ваш ответ на вопрос