当前位置: 首页 > 知识库问答 >
问题:

值未保存在savedInstanceState中

李明贤
2023-03-14

由于某些原因,gridView中的值没有从包中保存。也没有向logcat输出任何内容。我是否正确地从gridview获取值?它充满了编辑文本,因此应该从中获取值

public class RedScorerFragment extends SherlockFragment {

LayoutInflater infl;
GridView mGrid;

int R1C1, R1C2, R1C3;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    infl = inflater;
    View mView = inflater.inflate(R.layout.fragment_score_red, container, false);
    mGrid = (GridView) mView.findViewById(R.id.gridViewRed);


    if(savedInstanceState != null)
    {
        R1C1 = savedInstanceState.getInt("R1C1");
        R1C2 = savedInstanceState.getInt("R1C2");
        R1C3 = savedInstanceState.getInt("R1C3");

        Log.d("savedd R1C1 ", String.valueOf(R1C1));
        Log.d("savedd R1C2 ", String.valueOf(R1C2));
        Log.d("savedd R1C3 ", String.valueOf(R1C3));
    }


    mGrid.setAdapter(new ImageAdapter(getActivity()));
    return mView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);

    if(savedInstanceState != null)
    {
        R1C1 = savedInstanceState.getInt("R1C1", 0);
        R1C2 = savedInstanceState.getInt("R1C2", 0);
        R1C3 = savedInstanceState.getInt("R1C3", 0);

        Log.v("saved R1C1 ", String.valueOf(R1C1));
        Log.v("saved R1C2 ", String.valueOf(R1C2));
        Log.v("saved R1C3 ", String.valueOf(R1C3));
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);

    //for(int i=0;i<mGrid.getChildCount(); i++)
    Log.e("Saving", mGrid.getChildAt(0).toString());
    Log.e("Saving", mGrid.getChildAt(1).toString());
    Log.e("Saving", mGrid.getChildAt(2).toString());
    savedInstanceState.putInt("R1C1", Integer.valueOf(mGrid.getItemAtPosition(0).toString()) );
    savedInstanceState.putInt("R1C2", Integer.valueOf(mGrid.getItemAtPosition(1).toString()) );
    savedInstanceState.putInt("R1C3", Integer.valueOf(mGrid.getItemAtPosition(2).toString()) );

}

}

航海日志

12-22 23:58:38.736: E/AndroidRuntime(2481): FATAL EXCEPTION: main
12-22 23:58:38.736: E/AndroidRuntime(2481): java.lang.RuntimeException: Unable to pause activity {org.say.upscorer/org.say.upscorer.MainActivity}: java.lang.NullPointerException
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3348)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3305)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3288)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread.access$2500(ActivityThread.java:125)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2040)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.os.Looper.loop(Looper.java:123)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at java.lang.reflect.Method.invokeNative(Native Method)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at java.lang.reflect.Method.invoke(Method.java:521)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at dalvik.system.NativeStart.main(Native Method)
12-22 23:58:38.736: E/AndroidRuntime(2481): Caused by: java.lang.NullPointerException
12-22 23:58:38.736: E/AndroidRuntime(2481):     at org.saywatt.scoring.RedScorerFragment.onSaveInstanceState(RedScorerFragment.java:91)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.support.v4.app.Fragment.performSaveInstanceState(Fragment.java:1607)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1587)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1655)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:527)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at com.actionbarsherlock.app.SherlockFragmentActivity.onSaveInstanceState(SherlockFragmentActivity.java:127)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.Activity.performSaveInstanceState(Activity.java:1036)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1180)
12-22 23:58:38.736: E/AndroidRuntime(2481):     at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3330)
12-22 23:58:38.736: E/AndroidRuntime(2481):     ... 12 more

共有3个答案

井唯
2023-03-14
匿名用户

你可能是自动拳击的另一个受害者。我怀疑由于Bundle.putInt()将一个int作为第二个参数,而您为它提供了一个值Integer.valueOf(),它返回一个整数 .如果返回的整数不是null,这将是好的,但是取消装箱将无法将null转换为普通的int并导致NPE。

要做的事情实际上是针对具体情况的,并且取决于您的应用程序所做的事情。无论如何,确保我nteger.value()不返回null

宇文和昶
2023-03-14

父级活动如何在清单中声明?如果您正在处理配置更改,即。

android:configChanges= whatever

您的活动以及因此您的片段将不会被重新创建。

缑高朗
2023-03-14

Bundle::get函数系列将标记或id作为参数。这就是他们如何知道你到底在要求什么。即,

// get a String with id "R1C1", note the quotes
R1C1 = savedInstanceState.getString("R1C1");

您调用它们的方式是偶然的,因为您处理的是字符串,实际上是请求一个字符串,id为当时包含的任何R1C1

但是您将int放在bundle上,希望提取字符串,这是一个简单的错误。

 类似资料:
  • Suppose we loaded up a Parent in one Session, made some changes in a UI action and wanted to persist these changes in a new session by calling update(). The Parent will contain a collection of childre

  • 我正在尝试将一个xml文件保存到Android的内部存储中。但是,该文件没有得到保留。每次我重新启动模拟器时,该文件都会是空的。只有当我在应用程序中手动选择向其写入内容时,该文件才会被写入内容。然后,如果我关闭应用程序或其他什么,文件内容会被保留。但是,当我关闭模拟器时,文件会在那里,但是空的。 因此,我不确定我是否正确地保存了它。 请看看我的代码,也许它有问题,或者它与我的Android模拟器的

  • 问题内容: 我有一个简单的Web应用程序,想要在SQL Server中保存一些Float或Double格式。 但是有一个问题,当我尝试保存123.66时,在表中我看到存储了123.6600003662109。 保存到数据库时,为什么我的浮点数发生了变化?我该如何解决该错误? 谢谢 问题答案: 您 实际上 并没有尝试保存123.66,因为您不能完全以浮点数或双精度数表示123.66。仅此,数据库比以

  • 我想在一个外键中保存多个关系对象,但不幸的是,我在下面附加了一个错误。我的数据库中已经有ID为189的对象 错误: views.py 序列化程序。派克 模型。派克

  • 我在VSCode中的Vue(Nuxt)项目中使用ESLint。当我保存时,我希望我的ESLint自动运行并自动修复所有警告。 这是我的设置。VSCode中的json文件: 这是我的。js文件: 链接的../.eslintrc。js文件包含以下内容: 编辑:我已经打开了详细输出,我在输出中看到了这一点: 然后我运行了yarn add eslint plugin import并重试,它仍然返回相同的错

  • 问题是,即使我能够成功发送文档,其他用户也可以在线签名,但当我转到docusign配置文件时,发送的文档是不可见的。如果我不使用代表发送功能,文档连同状态,即out for signature或Signated将显示在我的配置文件中。这是怎么回事?谢谢