【问题标题】:Displaying data on first activity that is set in the second activity显示在第二个活动中设置的第一个活动的数据
【发布时间】:2018-05-20 05:57:21
【问题描述】:

问题是我有一个仪表板,它将显示 6 条生产线的数据,并且可以在 textviews 中查看进度。

但是,文本视图的数据来自一系列 IF 语句和在另一个活动上执行的计算。

当我运行应用程序时,因为仪表板试图在第二个activity 设置数据之前读取数据,有空指针是可以理解的,因为我什至没有机会进入第二个@ 987654323@还没有。

为了妥协,我不得不将仪表板上的 IF 语句设置为按钮,但是,这妨碍了我的应用程序的可用性,我希望数据在仪表板上自动刷新,而无需按下按钮。

在第二个活动中,我将值保存到共享首选项,然后在仪表板上,我获取共享首选项并将其设置为文本视图,但由于仪表板是第一个屏幕,因此仍然为空。

行详细信息 Java:(返回仪表板的主页按钮):

            SharedPreferences.Editor editor = getActivity().getSharedPreferences(MyPREFERENCES, MODE_PRIVATE).edit();

            if (spinnerSelection == null || spinnerSelection2 == null) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Data Input Error");
                builder.setMessage("Line S2 Data has not been entered yet!");
                builder.setIcon(R.drawable.warning_icon);
                builder.setCancelable(true);

                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                AlertDialog alert = builder.create();
                alert.show();
            } else if (spinnerSelection.equals("S1") && spinnerSelection2.equals("20")) {
                if (actualshippersnum > optimum20) {
                    plus20 = (int) (actualshippersnum - optimum20);
                    editor.putInt("Key1", plus20);
                    Toast.makeText(getActivity(), "Line S1 ahead by: " + (plus20) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum < optimum20) {
                    minus20 = (int) (optimum20 - actualshippersnum);
                    editor.putInt("Key2", minus20);
                    Toast.makeText(getActivity(), "Line S1 behind by: " + (minus20) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum == optimum20) {
                    editor.putInt("Key3", percentageActual20);
                    Toast.makeText(getActivity(), "Line S1 is on target at!", Toast.LENGTH_LONG).show();
                }
            } else if (spinnerSelection.equals("S1") && spinnerSelection2.equals("30")) {
                if (actualshippersnum == null) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("Refresh Error");
                    builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                    builder.setIcon(R.drawable.warning_icon);
                    builder.setCancelable(true);

                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });

                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    AlertDialog alert = builder.create();
                    alert.show();
                } else if (actualshippersnum > optimum30) {
                    plus30 = (int) (actualshippersnum - optimum30);
                    editor.putInt("Key 4", plus30);
                    Toast.makeText(getActivity(), "Line S1 ahead by: " + (plus30) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum < optimum30) {
                    minus30 = (int) (optimum30 - actualshippersnum);
                    editor.putInt("Key 5", minus30);
                    Toast.makeText(getActivity(), "Line S1 behind by: " + (minus30) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum == optimum30) {
                    editor.putInt("Key 6", percentageActual30);
                    Toast.makeText(getActivity(), "Line S1 is on target!", +Toast.LENGTH_LONG).show();
                }
            }
            if (spinnerSelection == null || spinnerSelection2 == null) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Data Input Error");
                builder.setMessage("Line S2 Data has not been entered yet!");
                builder.setIcon(R.drawable.warning_icon);
                builder.setCancelable(true);

                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                AlertDialog alert = builder.create();
                alert.show();
            } else if (spinnerSelection.equals("S2") && spinnerSelection2.equals("20")) {
                if (actualshippersnum == null) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("Refresh Error");
                    builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                    builder.setIcon(R.drawable.warning_icon);
                    builder.setCancelable(true);

                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });

                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    AlertDialog alert = builder.create();
                    alert.show();
                } else if (actualshippersnum > optimum20) {
                    plus20 = (int) (actualshippersnum - optimum20);
                    editor.putInt("Key 7", plus20);
                    Toast.makeText(getActivity(), "Line S2 ahead by: " + (plus20) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum < optimum20) {
                    minus20 = (int) (optimum20 - actualshippersnum);
                    editor.putInt("Key 8", minus20);
                    Toast.makeText(getActivity(), "Line S2 behind by: " + (minus20) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum == optimum20) {
                    editor.putInt("Key 9", percentageActual20);
                    Toast.makeText(getActivity(), "Line S2 is on target at!", Toast.LENGTH_LONG).show();
                }
            } else if (spinnerSelection.equals("S2") && spinnerSelection2.equals("30")) {
                if (actualshippersnum == null) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("Refresh Error");
                    builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                    builder.setIcon(R.drawable.warning_icon);
                    builder.setCancelable(true);

                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });

                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    AlertDialog alert = builder.create();
                    alert.show();
                } else if (actualshippersnum > optimum30) {
                    plus30 = (int) (actualshippersnum - optimum30);
                    editor.putInt("Key 10", plus30);
                    Toast.makeText(getActivity(), "Line S2 ahead by: " + (plus30) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum < optimum30) {
                    minus30 = (int) (optimum30 - actualshippersnum);
                    editor.putInt("Key 11", minus30);
                    Toast.makeText(getActivity(), "Line S2 behind by: " + (minus30) + " shippers", Toast.LENGTH_LONG).show();
                } else if (actualshippersnum == optimum30) {
                    editor.putInt("Key 12", percentageActual30);
                    Toast.makeText(getActivity(), "Line S2 is on target!", +Toast.LENGTH_LONG).show();
                }
            }
            if (spinnerSelection == null || spinnerSelection2 == null) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Data Input Error");
                builder.setMessage("Line S3 Data has not been entered yet!");
                builder.setIcon(R.drawable.warning_icon);
                builder.setCancelable(true);

                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                AlertDialog alert = builder.create();
                alert.show();
            } else if (spinnerSelection.equals("S3")) {
                if (spinnerSelection2.equals("20")) {
                    //HAVENT FILLED INTO DECOVIEW - 20
                    if (actualshippersnum == null) {
                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                        builder.setTitle("Refresh Error");
                        builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                        builder.setIcon(R.drawable.warning_icon);
                        builder.setCancelable(true);

                        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });

                        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });
                        AlertDialog alert = builder.create();
                        alert.show();
                    } else
                    if (actualshippersnum > optimum20) {
                        plus20 = (int) (actualshippersnum - optimum20);
                        editor.putInt("Key 13", plus20);
                        Toast.makeText(getActivity(), "Line S3 ahead by: " + (plus20)+ " shippers" , Toast.LENGTH_LONG).show();
                    } else if (actualshippersnum < optimum20) {
                        minus20 = (int) (optimum20 - actualshippersnum);
                        editor.putInt("Key 14", minus20);
                        Toast.makeText(getActivity(), "Line S3 behind by: " + (minus20)+ " shippers" , Toast.LENGTH_LONG).show();
                    } else if (actualshippersnum == optimum20) {
                        editor.putInt("Key 15", percentageActual20);
                        Toast.makeText(getActivity(), "Line S3 is on target!" , Toast.LENGTH_LONG).show();
                    }
                }
                else if (spinnerSelection2.equals("30")) {

                    //HAVENT FILLED INTO DECOVIEW - 30
                    if (actualshippersnum == null) {
                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                        builder.setTitle("Refresh Error");
                        builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                        builder.setIcon(R.drawable.warning_icon);
                        builder.setCancelable(true);

                        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });

                        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });
                        AlertDialog alert = builder.create();
                        alert.show();
                    } else
                    if (actualshippersnum > optimum30) {
                        plus30 = (int) (actualshippersnum - optimum30);
                        editor.putInt("Key 16", plus30);
                        Toast.makeText(getActivity(), "Line S3 ahead by: " + (plus30)+ " shippers" ,Toast.LENGTH_LONG).show();
                    } else if (actualshippersnum < optimum30) {
                        minus30 = (int) (optimum30 - actualshippersnum);
                        editor.putInt("Key 17", minus30);
                        Toast.makeText(getActivity(), "Line S3 behind by: " + (minus30)+ " shippers" , Toast.LENGTH_LONG).show();
                    } else if (actualshippersnum == optimum30) {
                        editor.putInt("Key 18", percentageActual30);
                        Toast.makeText(getActivity(), "Line S3 is on target!", Toast.LENGTH_LONG).show();
                    }
                }
            }
        }
    });
}

仪表板 Java:(恢复时)

public void onResume() {
    super.onResume();

    int getKey1, getKey2, getKey3, getKey4, getKey5, getKey6, getKey7, getKey8, getKey9, getKey10, getKey11, getKey12, getKey13, getKey14, getKey15, getKey16,getKey17, getKey18;

    if (spinnerSelection == null || spinnerSelection2 == null) {
        AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
        builder.setTitle("Data Input Error");
        builder.setMessage("No SP found!");
        builder.setIcon(R.drawable.warning_icon);
        builder.setCancelable(true);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    } else if (spinnerSelection.equals("S1") && spinnerSelection2.equals("20")) {
        if (actualshippersnum > optimum20) {
            getKey1 = sharedPreferences.getInt("Key1", plus20);
            bar4.setText(getKey1);
        } else if (actualshippersnum < optimum20) {
            getKey2 = sharedPreferences.getInt("Key2", minus20);
            bar4.setText(getKey2);
        } else if (actualshippersnum == optimum20) {
            getKey3 = sharedPreferences.getInt("Key3", percentageActual20);
            bar4.setText(getKey3);
    }


        else if (spinnerSelection.equals("S1") && spinnerSelection2.equals("30")) {
        if (actualshippersnum == null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
            builder.setTitle("Refresh Error");
            builder.setMessage("No SP found");
            builder.setIcon(R.drawable.warning_icon);
            builder.setCancelable(true);

            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } else if (actualshippersnum > optimum30) {
            getKey4 = sharedPreferences.getInt("Key4", plus30);
            bar4.setText(getKey4);
        } else if (actualshippersnum < optimum30) {
            getKey5 = sharedPreferences.getInt("Key5", minus30);
            bar4.setText(getKey5);
        } else if (actualshippersnum == optimum30) {
            getKey6 = sharedPreferences.getInt("Key6", percentageActual30);
            bar4.setText(getKey6);
        }
    }
    if (spinnerSelection == null || spinnerSelection2 == null) {
        AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
        builder.setTitle("Data Input Error");
        builder.setMessage("No SP found");
        builder.setIcon(R.drawable.warning_icon);
        builder.setCancelable(true);

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
    } else if (spinnerSelection.equals("S2") && spinnerSelection2.equals("20")) {
        if (actualshippersnum == null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
            builder.setTitle("Refresh Error");
            builder.setMessage("No SP found");
            builder.setIcon(R.drawable.warning_icon);
            builder.setCancelable(true);

            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } else if (actualshippersnum > optimum20) {
            getKey7 = sharedPreferences.getInt("Key7", plus20);
            bar5.setText(getKey7);
        } else if (actualshippersnum < optimum20) {
            getKey8 = sharedPreferences.getInt("Key8", minus20);
            bar4.setText(getKey8);
        } else if (actualshippersnum == optimum20) {
            getKey9 = sharedPreferences.getInt("Key9", percentageActual20);
            bar4.setText(getKey9);
        }
    } else if (spinnerSelection.equals("S2") && spinnerSelection2.equals("30")) {
        if (actualshippersnum == null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
            builder.setTitle("Refresh Error");
            builder.setMessage("No SP found");
            builder.setIcon(R.drawable.warning_icon);
            builder.setCancelable(true);

            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } else if (actualshippersnum > optimum30) {
            getKey10 = sharedPreferences.getInt("Key10", plus30);
            bar4.setText(getKey10);
        } else if (actualshippersnum < optimum30) {
            getKey11 = sharedPreferences.getInt("Key11", minus30);
            bar4.setText(getKey11);
        } else if (actualshippersnum == optimum30) {
            getKey12 = sharedPreferences.getInt("Key12", percentageActual30);
            bar4.setText(getKey12);
        }
    }
        if (spinnerSelection == null || spinnerSelection2 == null) {
            AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
            builder.setTitle("Data Input Error");
            builder.setMessage("Line S3 Data has not been entered yet!");
            builder.setIcon(R.drawable.warning_icon);
            builder.setCancelable(true);

            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } else if (spinnerSelection.equals("S3")) {
            if (spinnerSelection2.equals("20")) {
                //HAVENT FILLED INTO DECOVIEW - 20
                if (actualshippersnum == null) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
                    builder.setTitle("Refresh Error");
                    builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                    builder.setIcon(R.drawable.warning_icon);
                    builder.setCancelable(true);

                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });

                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    AlertDialog alert = builder.create();
                    alert.show();
                } else if (actualshippersnum > optimum20) {
                    getKey13 = sharedPreferences.getInt("Key13", plus20);
                    bar6.setText(getKey13);
                } else if (actualshippersnum < optimum20) {
                    getKey14 = sharedPreferences.getInt("Key14", minus20);
                    bar6.setText(getKey14);
                } else if (actualshippersnum == optimum20) {
                    getKey15 = sharedPreferences.getInt("Key15", percentageActual20);
                    bar6.setText(getKey15);
                }
            } else if (spinnerSelection2.equals("30")) {

                //HAVENT FILLED INTO DECOVIEW - 30
                if (actualshippersnum == null) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Dashboard.this);
                    builder.setTitle("Refresh Error");
                    builder.setMessage("Cannot Refresh! Please Fill in Line Details");
                    builder.setIcon(R.drawable.warning_icon);
                    builder.setCancelable(true);

                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });

                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    AlertDialog alert = builder.create();
                    alert.show();
                } else if (actualshippersnum > optimum30) {
                    getKey16 = sharedPreferences.getInt("Key16", plus30);
                    bar6.setText(getKey16);
                } else if (actualshippersnum < optimum30) {
                    getKey17 = sharedPreferences.getInt("Key17", minus30);
                    bar6.setText(getKey17);
                } else if (actualshippersnum == optimum30) {
                    getKey18 = sharedPreferences.getInt("Key18", percentageActual30);
                    bar6.setText(getKey18);

【问题讨论】:

  • 如果您发布一些代码会更容易提供帮助。
  • 应该可以,但是你应该检查你的共享偏好键是否有一个值,通过检查它是否为空,否则如果它是一个字符串。在将其设置为 textview 之前,从 onCreate 和 onResume 中获取值(以防第二个活动的 onbackpressed)
  • 我已经添加了代码:)
  • @MaciejBiałorucki
  • 我认为您应该在 Line Details 活动中对编辑器对象调用 apply() 或 commit()。

标签: java android nullpointerexception sharedpreferences


【解决方案1】:

您可以覆盖“仪表板”中的 onActivityResult 方法并从“行详细信息”活动中获取结果。 Follow this link for more info

【讨论】:

  • 所以我应该改用意图吗?如果我的仪表板是显示的第一个屏幕,那仍然会返回 null 吗?
  • 您也可以使用 SharedPreference。如果您的仪表板是第一次打开,那么您可以从共享首选项中获取默认值。然后当您打开详细信息页面时,将所有数据保存在共享首选项中并调用 setResult(RESULT_OK)。现在,当详细信息活动关闭时,您将在仪表板活动中我们重写的 onActivtyResult 方法中获得回调。从那里您可以刷新视图。这样视图自动更新的问题就解决了。
  • 这听起来很有希望,虽然我很不确定哪个代码在哪里?也是因为我需要在仪表板中重复 IF 语句来决定该行是在前面还是在目标上,所以我收到了 nulls @srs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
相关资源
最近更新 更多