获取nullpointer异常将数据从活动发送到片段onCreate

时间:2017-11-18 23:56:50

标签: java android android-fragments android-bundle

我一直在尝试使用bundle将我的活动中的一串数据发送到一个片段,但是当我尝试访问它时,它会产生一个nullpointerexception。

活动中的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上的片段看起来像这样

@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);
}

任何帮助摆脱nullpointer将不胜感激,我试图将数据发送到片段,以便它可以使用共享按钮并共享数据

1 个答案:

答案 0 :(得分: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);
  }

修改

忘记上一个答案并执行此操作:

删除此:

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

并假设您的活动名称是(MyActivity),然后在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;
   }

现在转到你的片段并从oncreateview

中删除它
    String strtext = getArguments().getString("edttext");

并在片段

中这样做
         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);

}

<强>更新

1)确保(items)列表不为null。你应该在填充它之前初始化它(为了检测问题,最好显示如何填充你的项目列表)。

2)在getmystring()方法中尝试这个:

         public String getmyString(){

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

          myString=items.get(i);
         }

         return myString;
        }

在填充任何内容之前,不要忘记在onCreate中初始化项目列表。