我有一个带有许多 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