0

は、私が活動をするためにここにこのガイドを使用しました。私はTablayoutバンドルnullオブジェクト参照

Activity.javaに合格しようとしています

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFrag(new ProfileFragment(), "Profile"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFrag(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

@Override 
    protected void onPostExecute(String JSON_STRING_GET_ID) { 
     try { 
      JSONObject jsonResponse = new JSONObject(JSON_STRING_GET_ID); 
      JSONArray jsonMainNode = jsonResponse.optJSONArray("server_response"); 

      for (int i = 0; i < jsonMainNode.length(); i++) { 
       JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); 
       get_nav_email = jsonChildNode.optString("email"); 

       Bundle bundle = new Bundle(); 
       bundle.putString("p_email", get_nav_email); 
       ProfileFragment fragToProfile = new ProfileFragment(); 
       fragToProfile.setArguments(bundle); 

      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

ProfileFragment.java:

ここ
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View myInflatedView = inflater.inflate(R.layout.fragment_profile, container,false); 

    String p_email = getArguments().getString("p_email"); 
    TextView txtTitle = (TextView)myInflatedView.findViewById(R.id.tvUsername2); 
    txtTitle.setText(p_email); 
    // Inflate the layout for this fragment 
    return myInflatedView; 
} 

でエラーが私が取得:

1779-1779/com.testing.dev.application E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.testing.dev.application, PID: 1779 
                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 
                        at com.testing.dev.application.fragment.ProfileFragment.onCreateView(ProfileFragment.java:43) 
                        at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
                        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
                        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
                        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
                        at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
                        at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
                        at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
                        at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 
                        at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                        at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:664) 
                        at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:731) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
                        at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
                        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
                        at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
                        at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535) 
                        at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
                        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
                        at android.view.View.measure(View.java:17547) 
                        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015) 
                        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173) 
                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379) 
                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
                        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885) 
                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
                        at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
                        at android.view.Choreographer.doFrame(Choreographer.java:550) 
                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
                        at android.os.Handler.handleCallback(Handler.java:739) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5254) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

まず、onPostExecute内で配列をループすると、前の値が上書きされてしまい、実際にここに必要なようには見えません。また、実際にフラグメントを表示しているわけではありません。 – Eenvincible

+0

@Engvincible意味を教えてください。私はコードsetupViewPagerとViewPagerAdapterでフラグメントを追加しています。私はOPを編集しました。 – Edward

答えて

1

私はあなたがここで検討したいかもしれないアプローチを持っています!もちろん、それはあなたの上にあります。

は、あなたのViewPagerAdapterクラスを作成し、addFrag()メソッドの内部で、あなたはこのようにあなたの電子メールの値を渡したい:

private String emailAddress; 

public ViewPagerAdapter(FragmentManager manager, String email) { 
    super(manager); 
    emailAddress = email; 
} 

Thtaがあなたの活動の内部で作成されますあなたのViewPagerAdapterのコンストラクタです。

同じViewPagerAdapterクラス内

、あなたは今、あなたはフラグメントにメールを渡していることをこの方法addFrag

public void addFrag(Fragment fragment, String title) { 
    Bundle bundle = new Bundle(); 
    //important line here to note 
    bundle.putString("email", emailAddress); 

    fragment.setArguments(bundle); 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
} 

を持つことになり、フラグメントのごONATTACHメソッド内、あなたはそれとセットを抽出することができますクラスレベル変数として。あなたは後でAsyncTaskが完了した後のように、タブに触れるユーザーせずにフラグメントを更新したいしかし、あなたはイベントを使用してに見ることができます

@Override 
public void onAttach(Context ctx){ 
    super.onAttach(ctx); 



    String emailAddress = getArguments().getInt("email"); 

    //do whatever you need here 
} 

場合。

基本的には、更新するフラグメントにAsyncTaskのonPostExecuteメソッドの新しいイベントを登録させます。

あなたは、単にこのようなあなたのbuild.gradleファイルに追加することができます。私のお気に入りのライブラリEventBus

を使用している:私はこのことができます願ってい

compile 'org.greenrobot:eventbus:3.0.0' 

を、あなたが任意のさらなる支援が必要な場合は私に知らせてください!

+0

ありがとうございましたが、それは私が必要なものではありません。私はバンドルを使って文字列を渡すのがなぜうまくいかず、どうして私がその断片に入れられないのかを知る必要があります。 – Edward

+0

まあ、私はあなたのコードで何かが欠けていると思います。 onPostExecuteを使用すると、フラグメントの新しいインスタンスを作成してバンドルを設定し、それを使って何もしないだけです! – Eenvincible

+0

onPostExecuteでは、情報をバンドルに入れてから、フラグメントページで取得することになっています。 – Edward

0

あなたがいますgetStringからバンドルがnullの場合はバンドルします。 バンドルがnullであるかどうかをチェックを追加してください:あなたはsetArgumentsメソッドを使用してFragmentに引数を渡す必要があります

String p_email = null; 
if(getArguments() != null) { 
    p_email = getArguments().getString("p_email"); 
} 
+0

はい、引数がnullかどうかを確認しています。私はそれが成功して議論を成功させ、それを得たいと思っています。私はこれをやってみました:bundle.putString( "p_email"、 "Test string");それはどちらもうまくいかない。 – Edward

+0

タブは変更されますか? – iamtodor

+0

いいえ、私はまだエラーが発生します。 – Edward

0

。デフォルトのコンストラクタではなくnewInstanceメソッドを使用すると、一般的にFragmentsをインスタンス化することをお勧めします。

thisおよびthisを参照してください。

+0

私はそれを試みましたが、それはまだ動作しません。 – Edward

関連する問題