发送从活动数据到片段:NPE [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发送从活动数据到片段:NPE [重复]相关的知识,希望对你有一定的参考价值。

这个问题已经在这里有一个答案:

我想从我的活动发送计算结果的片段。 我搜索如何做到这一点,我试图把它与一个包。 How to pass values between Fragments 我经常有一个问题,NPE,但当时我可以通过我自己解决这些问题也已经读:“什么是NPE和我怎么能解决这个问题”,但我不知道如何解决它在这种特殊情况下。 我是新来编码任何不便抱歉&也对不起,如果我忘了任何代码,但我想那些2班就足够了。 错误:

“java.lang.String中android.os.Bundle.getString(java.lang.String中)”上的空对象引用

下面是我的包的类。 KalorienZaehlerRechner.java:(FragmentActivity)

public class KalorienzaehlerRechner extends FragmentActivity {

Button btn;
EditText userProteine;
EditText userKH;
EditText userKHz;
EditText userFett;
EditText userGegG;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_kalorienzaehlerrechner);

    userProteine = findViewById(R.id.userGegPRechner);
    userKH = findViewById(R.id.userGegKHRechner);
    userKHz = findViewById(R.id.userGegKHzRechner);
    userFett = findViewById(R.id.userGegFRechner);
    userGegG = findViewById(R.id.userGegG);

    btn = findViewById(R.id.btnhin);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            gerichthinzufuegen();
        }
    });
}

public void gerichthinzufuegen(){

    int usG = Integer.parseInt(userGegG.getText().toString());
    int usKH = Integer.parseInt(userKH.getText().toString());
    int usKHz = Integer.parseInt(userKHz.getText().toString());
    int usP = Integer.parseInt(userProteine.getText().toString());
    int usF = Integer.parseInt(userFett.getText().toString());

    int USg = usG/100;

    float resultP = (usP * USg) * 4.1f;
    float resultF = (usF * USg) * 9.1f;
    float resultKH = (usKH * USg) * 4.1f;

    float userKcal = resultP + resultF + resultKH;
    int intUserKcal = Math.round(userKcal);



    Bundle bundle = new Bundle();
    bundle.putInt("data", intUserKcal);
    Fragment fragmentobject = new Fragment();
    fragmentobject.setArguments(bundle);

    }
}

这里是我的片段。我想在这里得到的结果在一个TextView来显示它。 Kalorienzähler.java:

public class KalorienzählerFragment extends Fragment {
Button neuesGericht;
TextView uKcal;

@Override
@Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View kalorienZaehler = inflater.inflate(R.layout.fragment_kalorienzaehler, container, false);

    uKcal = kalorienZaehler.findViewById(R.id.userGegKcal);
    neuesGericht = kalorienZaehler.findViewById(R.id.btnGericht);
    String userKcal = getArguments().getString("data");
    uKcal.setText(userKcal);

    neuesGericht.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openZaehlerRechner();

        }
    });

    return kalorienZaehler;
}

public void openZaehlerRechner(){
    Intent ZaehlerRechner = new Intent(getActivity(), KalorienzaehlerRechner.class);
    startActivity(ZaehlerRechner);
    }
}

谢谢大家谁帮助!

答案

在你的类“KalorienzählerFragment”,你需要编辑这些行:

String userKcal = getArguments().getString("data");
uKcal.setText(userKcal);

这些:

Bundle arguments = getArguments();
if (arguments != null) {
    uKcal.setText(arguments.getString("data", "<SomeDefaultValueIfYouWant>"));
}

你的问题是,该包为空,导致在NPE,调用的getString()的时候。

编辑:请注意,这并不解决根本问题。这不仅可以防止NPE

以上是关于发送从活动数据到片段:NPE [重复]的主要内容,如果未能解决你的问题,请参考以下文章

需要解释从适配器发送数据到片段

在Android中将数据从基本活动发送到片段[重复]

使用在另一个片段(NPE)中生成的值设置片段的 TextView [重复]

如何将字符串数据从活动发送到片段?

在Android中将数据从活动发送到片段

将数据从片段发送到活动,无需任何事件处理或侦听器