2017-04-15 84 views
0

我想將JSONArray從一個片段傳遞到另一個片段,但是我得到NullPointerException。如何將JSONArray從一個片段傳遞到另一個片段

片段1

JSONArray bankarray = jsonobject1.getJSONArray("banks"); 
Fragment f = new SendMoneyRecipientFragment(); 
Bundle b = new Bundle(); 
b.putString("banklist", banks); 
f.setArguments(b); 

片段2個

getArguments()的getString( 「banklist」);

非常感謝您的幫助。

+0

你在哪兒NullPointerException異常?什麼是b.putString(「銀行列表」,銀行)中的「銀行」;? – Sergey

+0

銀行是JSONArray字符串。 –

+0

我看不到您的碎片的完整代碼在哪裏有NullPointerException。在哪一行出現NullPointerException? – Sergey

回答

0

你可以使用Activity作爲它。例如: 片段1

public class Fragment1 extends Fragment { 

    private String mJSON; 
    private Context mContext; 

    public static Fragment1 instance() { 
     return new Fragment1(); 
    } 

    @Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     mContext = (IContext) context; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(context.toString() + " must implement " + IContext.class.getName()); 
    } 
} 

    //... some code to fetch JSON and set it to mJSON 


    private void onSomeButtonClick() { 
     if (mContext != null) { 
      mContext.showFragment2(mJSON); 
     } 
    } 
} 

Fragment2

public class Fragment2 extends Fragment { 
    private static final String KEY_JSON = "key_json"; 

    public static Fragment2 instance(String json) { 
     Bundle args = new Bundle(); 
     args.putString(KEY_JSON, json); 
     Fragment2 f = new Fragment2(); 
     f.setArguments(args); 
     return f; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_layout, container, false); 
    } 

    @Override 
    public void onViewCreated(View root, Bundle savedInstanceState) { 
     super.onViewCreated(root, savedInstanceState); 
     String json = getArguments().getString(KEY_JSON); 

     //do whatever you want with json 
    } 
} 

IContext

public interface IContext { 
    void showFragment2(String json); 
} 

你的活動

public class YourActivity extends AppCompatActivity implements IContext { 
    //... some code to initialize - onCreate() ... 


    @Override 
    public void showFragment2(String json) { 
     Fragment fr2 = Fragment2.instance(json); 
     FragmentTransaction tr = getSupportFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, fr2, fr2.getClass().getName()); 
     //add to backstack if need tr.addToBackStack(null); 
     tr.commitAllowingStateLoss(); 
    } 
} 
+0

你能解釋爲什麼要使用IContext嗎? –

+0

請檢查更新的代碼! –

+0

IContext是與活動交互的界面。 https://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – Sergey

相關問題