如何一键将数据正确保存在多个片段中?

pr0gram;

介绍

嗨,大家好。目前,我正在研究一个问题表单应用程序。在MainActivity中添加项目会打开QuestionListActivity。单击第一项将打开Main2Activity,其中包含3个片段(使用Viewpager选项卡)。每个片段都包含一个EditText字段来回答问题。还有一个带有保存按钮的工具栏。第一个问题是给表单一个名称,该名称在MainActivity中可见。单击MainActivity中一个保存的项目将打开QuestionList,然后单击第一个项目将显示片段及其保存的数据,这些片段已在EditText表单中进行查看或更改。处理完这些片段后,保存按钮应立即保存所有片段,而不是一次保存一个。

问题

首先,我只能保存项目。但是无法查看它们。然后,我为每个片段修复了Java类,现在可以在MainActivity中查看每个保存项的片段内的所有保存数据。但是现在的问题是我无法保存新数据,也无法更改已保存的数据,因为这样我在代码(LogCat)的私有void saveNote部分中得到了空对象引用。

我显然不应该在Main2Activity的oncreate方法中调用title,question2和question3,因此这会导致空对象引用。但是我真的不知道如何正确地做到这一点。希望有人知道如何正确地保存一项中每个片段的数据,也许知道如何在私有void saveNote中更改标题,question2和question3。

(我在StackOverFlow上搜索了正确的答案,但不幸的是,这无法以这种特定方式为我提供帮助)

代号

在这里,我发布了Main2Activity和一个片段(Frag1)的代码。其他片段的设置方法相同。

 public class Main2Activity extends AppCompatActivity {

    private void saveNote() {

    String title1,title2,title3;
    for(int position = 0; position<mSectionsPagerAdapter.getCount();position++){
        Fragment fragment = mSectionsPagerAdapter.getItem(position);
        if(fragment instanceof Frag1){
            title1 = ((Frag1)fragment).getTitle();
        } else  if(fragment instanceof Frag2){
            title2 = ((Frag2)fragment).getQuestion2();
        } else  if(fragment instanceof Frag3){
            title3 = ((Frag3)fragment).getQuestion3();
        }
    }

    boolean valid = !TextUtils.isEmpty(title1);
    valid = valid && !TextUtils.isEmpty(title2);
    valid = valid && !TextUtils.isEmpty(title3);

    Note note;

    if(!valid()){
        Toast.makeText(this, "Please provide inputs", Toast.LENGTH_SHORT).show();
        return;
    }
    note = new Note((mLoadedNote != null)?mLoadedNote.getDateTime():System.currentTimeMillis(), title.getText().toString(), question2.getText().toString(), question3.getText().toString());

    if (Utilities.saveNote(this, note)){
        Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show();
    } else{
        Toast.makeText(this, "not enough space", Toast.LENGTH_SHORT).show();
    }

    finish();
}


08-23 13:53:52.045 7779-7779/com.example.beginnoteinidee E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.beginnoteinidee, PID: 7779
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
    at com.example.beginnoteinidee.Main2Activity.saveNote(Main2Activity.java:109)
    at com.example.beginnoteinidee.Main2Activity.onOptionsItemSelected(Main2Activity.java:139)
    at android.app.Activity.onMenuItemSelected(Activity.java:2885)
    at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:436)
    at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:196)
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
    at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
    at android.support.v7.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:64)
    at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:204)
    at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:781)
    at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
    at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981)
    at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
    at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151)
    at android.view.View.performClick(View.java:4780)
    at android.view.View$PerformClick.run(View.java:19866)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
克里希纳·夏尔马(Krishna Sharma):

如下更改您的saveNote方法,

private void saveNote() {

    String title1="",title2="",title3="";
    for(int position = 0; position<mSectionsPagerAdapter.getCount();position++){
        Fragment fragment = mSectionsPagerAdapter.getItem(position);
        if(fragment instanceof Frag1){
            title1 = ((Frag1)fragment).getTitle();
        } else  if(fragment instanceof Frag2){
            title2 = ((Frag2)fragment).getTitle();
        } else  if(fragment instanceof Frag2){
            title3 = ((Frag2)fragment).getTitle();
        }
    }

    boolean valid = !TextUtils.isEmpty(title1);
    valid = valid && !TextUtils.isEmpty(title2);
    valid = valid && !TextUtils.isEmpty(title3);

    Note note;

    if(!valid){
        Toast.makeText(this, "Please provide inputs", Toast.LENGTH_SHORT).show();
        return;
    }
    note = new Note((mLoadedNote != null)?mLoadedNote.getDateTime():System.currentTimeMillis(), title1, title2, title3);

    if (Utilities.saveNote(this, note)){
        Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show();
    } else{
        Toast.makeText(this, "not enough space", Toast.LENGTH_SHORT).show();
    }

    finish();
}

您还需要在每个片段Frag1,Frag2和Frag3上创建方法getTitle。

例如,

片段1

public String getTitle(){
 return mEtTitle.getText().toString();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将数组正确保存在数据库中?

如何将文件正确保存在数据文件夹中

Ionic 3,Firebase将值保存在同一键下的两个数据库中

将 (x,y) 形式的数据正确保存在 csv 文件中

刷新后多对一实体为空但正确保存在数据库中

如何在python中以唯一键和多个值将输出作为字典返回?

SQLITE DB 如何将多个表的数据保存在一个文件中?

如何正确将片段的实例状态保存在后堆栈中?

如何从 StreamBuilder 将数据正确保存到我的模型中

如何确保关联列表在Emacs中维护唯一键

如何将多个值作为数组接受到同一键参数中?

在循环Java中为同一键哈希映射保存多个值

如何使用自定义键将数据保存在数据库中?

如何将数据框列的分类值转换为sckikit-learn中的一键编码列?

如何在张量流RNN中正确处理一键编码和多维数据

Pandas Dataframe:如何将一列拆分为多个一键编码的列

我的数据未正确保存在数据库中

将唯一键保存为任何集合中javascript中的对象

插入数据后,如何确保外键作为另一个表中的主键存在?

如何在php中一键保存数据和打印表单?

以最快的方式将一键编码的功能保存到Pandas DataFrame中

一键式如何使用URL将多个图像下载到设备内部存储

Django多对多字段未正确保存在数据库中

德语字符üöäÄÜÖß未正确保存在数据库中

无法将文件正确保存在FTPClient中的ftp上

如何一键将 200 行从实体框架插入数据库

给定JSON对象的NSArray,如何在NSDictionary中为同一键存储多个值?

如何通过django rest框架一键发布目录中的多个图像

Django MySQL-将多个记录一起保存在数据库中