提问人:hpf99 提问时间:2/4/2019 最后编辑:Phantômaxxhpf99 更新时间:2/4/2019 访问量:38
将数据从 Activity 发送到 Fragment:NPE [重复]
Sending data from Activity to Fragment: NPE [duplicate]
问:
我正在尝试将我的 Activity 的计算结果发送到 Fragment。
我搜索了如何做到这一点,我正在尝试使用捆绑包。如何在片段
之间传递值 我经常遇到 NPE 问题,但当时我可以自己修复它们我也已经读过:“什么是 NPE,我该如何解决它”,但我不知道如何在这种特定情况下修复它。
我是编码新手,很抱歉给您带来任何不便,如果我忘记了任何代码,也很抱歉,但我认为这 2 个类就足够了。
错误:
空对象引用上的“java.lang.String android.os.Bundle.getString(java.lang.String)”
这是我的 Bundle 的类。
KalorienZaehlerRechner.java:(片段活动)
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);
}
}
感谢所有愿意提供帮助的人!
答:
0赞
ThexXTURBOXx
2/4/2019
#1
在类 “KalorienzählerFragment” 中,您需要编辑以下行:
String userKcal = getArguments().getString("data");
uKcal.setText(userKcal);
对于这些:
Bundle arguments = getArguments();
if (arguments != null) {
uKcal.setText(arguments.getString("data", "<SomeDefaultValueIfYouWant>"));
}
您的问题是,在调用 getString() 时,Bundle 为 null,这会导致 NPE。
编辑:请注意,这并不能解决根本问题。这只能防止 NPE
评论
FragmentTransaction
<fragment>
KalorienzählerFragment
Fragment
<fragment>
Activity
Fragment
setContentView()
KalorienzählerFragment
<fragment>
<FrameLayout>
Fragment