2017-11-18 10 views
-1

私は自分のアクティビティからバンドルを使用してフラグメントにデータの文字列を送信しようとしましたが、アクセスしようとするとnullpointerexceptionを返します。 I「は、nullpointer例外をアクティビティからフラグメントに送信するonCreate

活動中のOnCreateメソッドは、この

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chart); 

    // Setup toolbar and title 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    readDb(); 
    printChart(); 
    printTop10(); 

    Bundle bundle = new Bundle(); 
    bundle.putString("edttext", myString); 
    // set Fragmentclass Arguments 
    ToolbarFragment fragobj = new ToolbarFragment(); 
    fragobj.setArguments(bundle); 

} 

のように見え、onCreateView上のフラグメントをいただければ幸いですnullポインタを取り除くために、この

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

    String strtext = getArguments().getString("edttext"); 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_toolbar, container, false); 
} 

任意のヘルプのように見えます私は共有ボタンを使用してデータを共有できるようにフラグメントにデータを送信しようとしています

+0

あなたはどこでも 'fragobj'を取引していません。 'ToolbarFragment'を' Activity'にどのくらいロードしていますか? –

答えて

0

「edttext」キーを取得するとnullが発生しているようです実際に値が割り当てられていないときにトリガされるので、デフォルト値を持つ "edttext"キーを取得するとnullを回避できます。

そのフラグメントのoncreateviewで

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

//in this line add these "" as a default value to avoid null. 

String strtext = getArguments().getString("edttext",""); 

// Inflate the layout for this fragment 
return inflater.inflate(R.layout.fragment_toolbar, container, false); 
    } 

EDIT

は前の回答を忘れて、これを行うように実行します。

は、この削除:

  Bundle bundle = new Bundle(); 
bundle.putString("edttext", myString); 
// set Fragmentclass Arguments 
ToolbarFragment fragobj = new ToolbarFragment(); 
fragobj.setArguments(bundle); 

をし、あなたの活動名が(My活動は)、そして今あなたのフラグメントに行くとフラグメント

  private String strtext=""; 

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

//now get the string like that 

    strtext=((MyActivity)getActivity).getmyString(); 

// Inflate the layout for this fragment 
return inflater.inflate(R.layout.fragment_toolbar, container, false); 

}

にこのようoncreateview

String strtext = getArguments().getString("edttext"); 

からこれを削除してくださいOnCreateの

 private String myString="whatever"; 

     @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chart); 

     // Setup toolbar and title 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     readDb(); 
     printChart(); 
     printTop10(); 


     } 


    //add this method (this method will send the myString to fragment) 
    public String getmyString(){ 


    return myString; 
    } 

の下にこれを行います更新

1)(items)リストがnullでないことを確認します。アイテムを作成する前に初期化しておく必要があります(問題を検出するために、アイテムリストをどのように埋め込むかがわかります)。

2)getmystringでこれを試してください()メソッド:

  public String getmyString(){ 

     for(int i=0 ; i<items ; i++){ 

      myString=items.get(i); 
     } 

     return myString; 
     } 

はちょうどあなたが何かを取り込む前のonCreateであなたのアイテムリストを初期化することを忘れないでください。

+0

それが壊れていると言っている 原因:java.lang.NullPointerException:仮想メソッド 'java.lang.String android.os.Bundle.getString(java.lang.String、java.lang.String)'を呼び出しようとしていますエデットタイプ – Kevin

+0

の後に ""を追加するヌルオブジェクト参照は空にする(mystring)か、値を持っていますか? –

+0

(mystring)のコードを貼り付けて、どのように値を設定しますか? –