NullException при попытке передать данные из действия во фрагмент - PullRequest
0 голосов
/ 20 сентября 2018

Что-то странное: я пытаюсь передать данные из профиля активности в VewPostFragment: код в действии:

private String s=" ";
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        Log.d(TAG, "onCreate: started.");

        ProfileUserName = (TextView) findViewById(R.id.display_name);

        test();
        ViewPostFragment fragment = ViewPostFragment.newInstance("Your value");
    }
 private void test()
    {
        ViewPostFragment mFragment=new ViewPostFragment();
                                Bundle args=new Bundle();
                                args.putString("PostKeyS" , s);
                                mFragment.setArguments(args);
    }

Я проверяю, не равны ли данные "s" нулю

во фрагменте мой код:

 @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState)
    {

        View view=inflater.inflate(R.layout.fragment_view_post,container,false);


        mBackArrow=(ImageView) view.findViewById(R.id.backArrow);



        String value = getArguments().getString("PosKeyS");
        Toast.makeText(getActivity(), "TThe code is the same?" + value, Toast.LENGTH_SHORT).show();
        return view;

    }
public static ViewPostFragment newInstance(String s) {
        ViewPostFragment fragment = new ViewPostFragment();
        Bundle args = new Bundle();
        args.putString("PostKeyS", s);
        fragment.setArguments(args);
        return fragment;
    }

и я всегда получаю ошибку: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: com.example.android.bluesky, PID: 22380 java.lang.RuntimeException: Невозможно запустить действиеComponentInfo {com.example.android.bluesky / com.example.android.bluesky.Profile.ProfileActivity}: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.os.Bundle.getString (java.lang.String) 'для ссылки на пустой объект в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2406) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2466) в android.app.ActivityThread.access $ 1200 (ActivityThread.java:152) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1341) в android.os.Handler.dispatchMessage (Handler.java:102) в android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5538) на java.lang.reflect.Method.invoke (собственный метод) на java.lang.reflect.Method.invoke (Method.java:372) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:958) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:753) Причина: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.os.Bundle.getString (java.lang.String)' для пустой ссылки на объект в com.example.android.bluesky.ViewPostFragment.onCreateView (ViewPostFragment).java: 91) в android.support.v4.app.Fragment.performCreateView (Fragment.java:2346) в android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1428) в android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManager.java:1759) в android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1827) в android.support.v4.app.BackStackRackd.java:797) на android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManager.java:2596) на android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManager.java:2383) на android.su.app.) в android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated (FragmentManager.java:3200) в android.support.v4.app.FragmentController.dispatchActivityCreated (FragmentController.java:195) в android.support.v.onStart (FragmentActivity.java:597) на android.support.v7.app.AppCompatActivity.onStart (AppCompatActivity.java:177) на com.example.android.bluesky.Profile.ProfileActivity.onStart (ProfileActivity.java:115) на андроиде.app.Instrumentation.callActivityOnStart (Instrumentation.java:1224) в android.app.Activity.performStart (Activity.java:6032) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2369) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2466)на android.app.ActivityThread.access $ 1200 (ActivityThread.java:152) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1341) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:135) на android.app.ActivityThread.main (ActivityThread.java:5538) на java.lang.reflect.Method.invoke (собственный метод) на java.lang.reflect.Method.invoke (Method.java:372) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:958) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:753) I/ Процесс: отправка сигнала.PID: 22380 SIG: 9 Приложение прекращено.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я попросил вас опубликовать оставшуюся часть вашего ViewPostFragment, потому что я думаю, что проблема не в том коде, который вы предоставили (я обновлю этот ответ, если необходимо).

Из предоставленногоконтекст не имеет прямого отношения к тому, как вы передаете данные.

Как вы заявили, вы пытаетесь выполнить Toast для метода onCreateView().

С тех порэто фрагмент, который делает это на onViewCreated() вместо (это также зависит от того, какой суперкласс Fragment ваш фрагмент выходит из версии поддержки или (устаревшей) инфраструктуры.

Я также рекомендую вам прочитать эти3-минутные статьи, которые помогут вам прояснить способ передачи данных:

0 голосов
/ 20 сентября 2018

Вы должны использовать метод newInstance для этого

Сначала вы должны добавить этот метод в свой фрагмент

public static ViewPostFragment newInstance(String s) {
    ViewPostFragment fragment = new ViewPostFragment();
    Bundle args = new Bundle();
    args.putString("PostKeyS", s);
    fragment.setArguments(args);
    return fragment;
}

, затем вы должны отправить данные в упражнении, как это

ViewPostFragment fragment = ViewPostFragment.newInstance("Your value");

наконец, вы можете получить данные в вашем фрагменте следующим образом

String value = getArguments().getString("PosKeyS");
...