я пытаюсь отправить данные из activity во фрагмент, но получаю эту ошибку, кто-нибудь может помочь, пожалуйста?

#android #android-fragments

#Android #android-фрагменты

Вопрос:

эта ошибка, которую я получил, введите описание изображения здесь

 public class ProfileFragment extends Fragment {
TextView profileNames,ProfileRegNumber;
String regnumber;
String Student_URL ="http://192.168.43.244/ULKandroid/student.php";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_profile,container,false);
    //HomeActivity homeActivity = new HomeActivity();
    profileNames = (TextView) v.findViewById(R.id.txtProfileNames);
    ProfileRegNumber = (TextView) v.findViewById(R.id.txtProfileRegNo);

    String n = this.getArguments().getString("names");
    String r = this.getArguments().getString("reg");

    profileNames.setText(n);
    ProfileRegNumber.setText(r);

    return v;
}
  

}

итак, я получаю ту же ошибку, которая выглядит так

11-08 11:54:12.604 4154-4154/cards.inkuge.com.ulkstudent E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: cards.inkuge.com.ulkstudent, PID: 4154 java.lang.Исключение NullPointerException в cards.inkuge.com.ulkstudent.Фрагменты.ProfileFragment.onCreateView(ProfileFragment.java: 46) в androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600) в androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java: 881) в androidx.fragment.app.FragmentManagerImpl. moveFragmentToExpectedState(FragmentManagerImpl.java:1238) в androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java: 1303) в androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java: 439) в androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java :2079) в androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java: 1869) в androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824 ) в androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727) в androidx.fragment.app.FragmentManagerImpl$2.выполнить(FragmentManagerImpl.java :150) на Android.os.Handler.handleCallback(Handler.java: 733) на android.os.Handler.DispatchMessage(Handler.java:95) на android.os.Looper.loop(Looper.java: 136) на android.app.ActivityThread.main(ActivityThread.java: 5017) на java.lang.reflect.Method.invokeNative (собственный метод) в java.lang.reflect.Method.invoke(Method.java: 515) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 779) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 595) в dalvik.system.NativeStart.main(роднойМетод)

  1. Элемент списка

и это действие, в котором задаются аргументы

 else {
                                        Intent intent = new Intent(LoginActivity.this,HomeActivity.class);
                                        Bundle bundle = new Bundle();
                                        bundle.putString("names",jsonObject.getString("student_names"));
                                        bundle.putString("reg",jsonObject.getString("regnumber_student"));
                                        ProfileFragment fragment = new ProfileFragment();
                                        bundle.putString("names",jsonObject.getString("student_names"));
                                        bundle.putString("reg",jsonObject.getString("regnumber_student"));
                                        fragment.setArguments(bundle);
                                        intent.putExtras(bundle);
                                        startActivity(intent);
                                        clear();
                                        finish();
                                    }
  

Комментарии:

1. Опубликуйте код, в котором вы передаете «имена» и «reg» фрагменту

Ответ №1:

Вы должны создать свой фрагмент примерно так:

  public static ProfileFragment NewInstance(String names, String reg) {
    ProfileFragment fragment = new ProfileFragment();

    Bundle bundle = new Bundle();
    bundle.putString("names", names);
    bundle.putString("reg", reg);
    fragment.setArguments(bundle);
    return fragment;
}
  

Также убедитесь, что у вас есть такой конструктор

  public ProfileFragment() {
    // Required empty public constructor
}
  

Определите глобальные переменные в этом фрагменте следующим образом:

 private String _names;
private String _reg;
  

Переопределите метод onCreate следующим образом:

  @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    if(getArguments() != null) {
        _names= getArguments().getString("names");
        _reg= getArguments().getString("reg");
    }
}
  

затем в вашем методе OnCrateView задайте текст следующим образом:

 profileNames.setText(_names);
ProfileRegNumber.setText(_reg);
  

И в Activity создайте фрагмент, подобный этому.

 private void replaceFragmentInternal(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.enter_fragment, R.anim.exit_fragment);

            fragmentManager.popBackStack();
            fragmentTransaction
                    .addToBackStack(null)
                    .replace(R.id.frameLayoutHolder, fragment)
                    .commit();
    }


 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        replaceFragmentInternal(ProfileFragment.NewInstance(names,reg));
}