【问题标题】:java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object referencejava.lang.String android.os.Bundle.getString(java.lang.String)' 在空对象引用上
【发布时间】:2017-04-04 20:36:07
【问题描述】:

我试图将数据从 PageAdapter 发送到片段两天,但完全没有成功。 我正在使用 Bundle,并像这样发送:

     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ficha__completa);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Create the adapter that will return a fragment for each of the three
        // primary sections of the activity.
        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 
        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.container);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        nome="Chimpanze";

        try {
            Bundle bundle = new Bundle();
            bundle.putString("Nome_animal",nome);
            Imagem_Animal imagem = new Imagem_Animal();
            imagem.setArguments(bundle);
        } catch (Exception e) {
            Log.d(TAG_LOG,"Erro de bundle: "+e.getLocalizedMessage());
        }
    }

而我的片段是这样的:

public class Imagem_Animal extends Fragment {
    ImageView imagem_p;
    static final String TAG ="Fragmento";
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View Layout_imagem = inflater.inflate(R.layout.fragment_imagem__animal, container, false);
        imagem_p = (ImageView) Layout_imagem.findViewById(R.id.imagem);
        try {
            String nomeAnimal = getArguments().getString("Nome_animal");
        } catch (Exception e){
            Log.d(TAG, "getStirng :"+e.getMessage());
        }
        return Layout_imagem;
    }
}

日志:getString:尝试在空对象引用上调用虚拟方法“java.lang.String android.os.BaseBundle.getString(java.lang.String)”

有人可以帮帮我吗?

非常感谢

【问题讨论】:

  • 我试图将数据从 PageAdapter 发送到片段?为什么不直接使用 MainActivity 的上下文访问数据?
  • 发布并接受您的回答。这对未来的开发者会更有帮助。

标签: java android fragment


【解决方案1】:

如果片段在您的MainAtivity 中,实际上pagerAdapter 就在其中。那么您可以访问Imagem_Animal Fragment 中的字段,就像

((MainActivity) getActivity()).nome

而不是在一个包中传递它。

【讨论】:

  • 我已经尝试过这种方式,并且一直返回相同的错误:/
  • 然后检查为什么nome 字段是空的,如果您像上面那样访问它。可能是您的Fragment 在变量初始化之前被加载。在变量初始化后设置你的PagerAdapter
  • 这个错误是关于 Toast 的上下文不正确,而不是关于获取数据!谢谢!
【解决方案2】:

在您的片段中创建函数,如下所示。

 public void someFunctionName(String data){

 }

在寻呼机适配器中执行如下操作。

@Override
public Fragment getItem(int position) {
    Imagem_Animal ani= new Imagem_Animal();
    ani.someFunctionName("yourdata");
    return ani;
}

就是这样

【讨论】:

  • 非常感谢,但我使用了其他解决方案 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多