我有一个带有许多 textEdits 的片段,当我按下按钮时,这些字符串应该放在表格列中[重复]

Posted

技术标签:

【中文标题】我有一个带有许多 textEdits 的片段,当我按下按钮时,这些字符串应该放在表格列中[重复]【英文标题】:I have a fragment with many textEdits which strings should be put in a table column when I press a button [duplicate] 【发布时间】:2020-04-16 23:37:43 【问题描述】:

我正在制作一个带有两个片段的视图寻呼机的应用程序;其中一个有许多不同的editTextes,如下图所示: ui of the fragment

当用户单击 Aggiungi(顶部的那个)按钮时,我想将每个字符串放在名为 Puntostrada 的表的列中

当您按下按钮时应用程序崩溃

这是创建数据库的:

public void onCreate(SQLiteDatabase db) 
    db.execSQL("CREATE TABLE PUNTOSTRADA ("
            + "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
            + "MYSELF_PAST TEXT, "
            + "MYSELF_PRESENT TEXT , "
            + "MYSELF_FUTURE TEXT , "
            + "OTHERS_PAST TEXT , "
            + "OTHERS_PRESENT TEXT ,"
            + "OTHERS_FUTURE TEXT ,"
            + "WORLD_PAST TEXT ,"
            + "WORLD_PRESENT TEXT ,"
            + "WORLD_FUTURE TEXT ,"
            + "GOD_PAST TEXT ,"
            + "GOD_PRESENT TEXT ,"
            + "GOD_FUTURE TEXT);");

这是片段的 onCreate:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
     View view = inflater.inflate(R.layout.fragment_punto, container, false);
     View button = view.findViewById(R.id.add_button);
      button.setOnClickListener(
            new View.OnClickListener() 
                @Override
                    public void onClick(View v) 

                    String myselfh,myselfp,myselff,othersS,othersP,othersF,godS,godP,godF,worldS,worldP,worldF;
                    EditText myselfStoria = Objects.requireNonNull(getView()).findViewById(R.id.myself_story);
                    myselfh=myselfStoria.getText().toString();
                    EditText myselfPresent = Objects.requireNonNull(getView()).findViewById(R.id.myself_present);
                    myselfp=myselfPresent.getText().toString();
                    EditText myselfFuture =  Objects.requireNonNull(getView()).findViewById(R.id.myself_future);
                    myselff=myselfFuture.getText().toString();
                    EditText othersPast =  Objects.requireNonNull(getView()).findViewById(R.id.others_story);
                    othersS=othersPast.getText().toString();
                    EditText othersPresent =  Objects.requireNonNull(getView()).findViewById(R.id.others_present);
                    othersP=othersPresent.getText().toString();
                    EditText othersFuture =  Objects.requireNonNull(getView()).findViewById(R.id.others_future);
                    othersF=othersFuture.getText().toString();
                    EditText godPast =  Objects.requireNonNull(getView()).findViewById(R.id.god_story);
                    godS=godPast.getText().toString();
                    EditText godPresent =  Objects.requireNonNull(getView()).findViewById(R.id.god_present);
                    godP=godPresent.getText().toString();
                    EditText godFuture =  Objects.requireNonNull(getView()).findViewById(R.id.god_future);
                    godF=godFuture.getText().toString();
                    EditText WorldPast =  Objects.requireNonNull(getView()).findViewById(R.id.world_past);
                    worldS=WorldPast.getText().toString();
                    EditText worldPresent =  Objects.requireNonNull(getView()).findViewById(R.id.world_present);
                    worldP= worldPresent.getText().toString();
                    EditText WorldFuture =  Objects.requireNonNull(getView()).findViewById(R.id.world_future);
                    worldF=WorldFuture.getText().toString();
                    puntoValues.put("MYSELF_PAST",myselfh);
                    puntoValues.put("MYSELF_PRESENT",myselfp);
                    puntoValues.put("MYSELF_FUTURE",myselff);
                    puntoValues.put("OTHERS_PAST",othersS);
                    puntoValues.put("OTHERS_PRESENT",othersP);
                    puntoValues.put("OTHERS_FUTURE",othersF);
                    puntoValues.put("GOD_PAST",godS);
                    puntoValues.put("GOD_PRESENT",godP);
                    puntoValues.put("GOD_FUTURE",godF);
                    puntoValues.put("WORLD_PAST",worldS);
                    puntoValues.put("WORLD_PRESENT",worldP);
                    puntoValues.put("WORLD_FUTURE",worldF);
                    SQLiteDatabase db = helper.getWritableDatabase();
                    db.insert("PUNTOSTRADA", null, puntoValues);
                    db.close();
                  Toast.makeText(getActivity(),"RECORD AGGIUNTO",Toast.LENGTH_SHORT).show();
                
            
    );

    return view;

对不起,意大利面条代码这是我的第一个真正有用的程序(我是意大利人,顺便说一句......) 如果你只在里面放 toast 通知,eventHandler 就可以工作,所以我认为只有这段代码会产生问题

这是 android studio 在应用崩溃时给出的堆栈跟踪:

2019-12-26 21:50:41.838 24285-24285/com.penta.angri3app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.penta.angri3app, PID: 24285
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:352)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
    at com.penta.angri3app.PuntoFragment$1.onClick(PuntoFragment.java:82)
    at android.view.View.performClick(View.java:6597)
    at android.view.View.performClickInternal(View.java:6574)
    at android.view.View.access$3100(View.java:778)
    at android.view.View$PerformClick.run(View.java:25885)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6718)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

【问题讨论】:

发布错误日志。 【参考方案1】:

由于在尝试获取可写数据库时抛出空指针,因此问题很可能是 SQLiteDatabase db = helper.getWritableDatabase(); 行是遇到 空指针 的位置。

最可能的原因是 helper 为 null,因此尚未实例化。

如果您要在该行添加断点,然后在调试模式下运行(即您应该做什么),那么您很可能会在调试窗口中看到 helper 为空。

解决问题

没有足够的代码来确定如何解决这个问题,因为没有显示 helper 类的实例。

假设 helper 类型(实例化/构造它的类)是DatabaseHelper它可能不是)并且它的签名只需要1个参数,即上下文,然后使用:-

helper = new DatabaseHelper(v.getContext);
SQLiteDatabase db = helper.getWritableDatabase();
......

会解决这个问题。

【讨论】:

以上是关于我有一个带有许多 textEdits 的片段,当我按下按钮时,这些字符串应该放在表格列中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用带有片段的部分,NullPointerException

带有许多片段的 Android 导航抽屉

带有片段的标题栏与列表视图重叠

当我导航回片段时,片段的内容消失了

带有 ListView 的片段:setAdapter 上的 NullPointerException

来自另一个片段的 Snackbar 回调