【问题标题】:Send data through Intent通过 Intent 发送数据
【发布时间】:2016-02-25 03:45:23
【问题描述】:

有ListView,它必须在点击项目后将数据发送到另一个Activity

这是发送数据:

listFavorites.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> listView, View v, int position, long id) {

        Intent intent = new Intent(ListWords.this, MainActivity.class);
        intent.putExtra(MainActivity.EXTRA_MESSAGE, Long.toString(id));
        startActivity(intent);


    }

这是获取数据:

  public Fragment getItem(int id) {
       if(id>=0&&getIntent().getExtras().get(EXTRA_MESSAGE)==null) {
           return PageFragment.newInstance(id);
       }else if(id==0&&getIntent().getExtras().get(EXTRA_MESSAGE)!=null){
           int drinkID = (Integer) getIntent().getExtras().get(EXTRA_MESSAGE);
           return PageFragment.newInstance(drinkID);}
        else{
           return PageFragment.newInstance(id);
       }

这部分工作正常:if(id==0&&getIntent().getExtras().get(EXTRA_MESSAGE)!=null)

但这里它不会检查 null: getIntent().getExtras().get(EXTRA_MESSAGE)==null

错误显示为 尝试在空对象引用上调用虚拟方法“java.lang.Object android.os.Bundle.get(java.lang.String)”

提前感谢,感谢任何帮助和建议

【问题讨论】:

    标签: java android android-intent android-activity


    【解决方案1】:
    Intent intent=getIntent();
    if(intent.getExtras()!=null)
    {    
       if(id>=0&&intent.getExtras().get(EXTRA_MESSAGE)==null) {
           return PageFragment.newInstance(id);
       }else if(id==0&&intent.getExtras().get(EXTRA_MESSAGE)!=null){
           int drinkID = (Integer) intent.getExtras().get(EXTRA_MESSAGE);
           return PageFragment.newInstance(drinkID);}
        else{
           return PageFragment.newInstance(id);
       }
    }
    

    【讨论】:

    • 非常感谢,你能解释一下是什么问题吗?
    【解决方案2】:

    由于您将 long 值转换为 String,因此它不能为 null,因为 long 的值是在显示的项目列表中预定义的。

    【讨论】:

    • 感谢快速响应,我写了 intent.putExtra(MainActivity.EXTRA_MESSAGE, (int) id);但是还是报错
    • id 很长,因此您将较大的值向下转换为较小的值,这可能是问题所在。只需删除 (int) 演员表。
    • 但是在调试代码时它会返回 id,而且这部分 if(id==0&&getIntent().getExtras().get(EXTRA_MESSAGE)!=null) 运行良好
    • 那么现在主要的问题是什么,我们可以解决它
    【解决方案3】:

    好吧,我的第一次尝试是重构 if 块,以便它可以更有效:

    if(id==0&&getIntent().getExtras().get(EXTRA_MESSAGE)!=null)
    {
        int drinkID = (Integer) getIntent().getExtras().get(EXTRA_MESSAGE);
        return PageFragment.newInstance(drinkID);
    }
    else
    {
        return PageFragment.newInstance(id);
    }
    

    为什么,你可能会问?因为如果我们检查第一个和第三个 if 语句的结果,你返回的是完全相同的东西,所以第一个 if 块是没有用的。现在,这种方式效率更高,并且您正在删除技术上从未评估过的 if 语句。

    【讨论】:

    • 感谢您的快速响应。你看我有两种发送数据的方式:第一种通过 Intent,正如我写的,第二种是通过 id -> PageFragment.newInstance(int id)......第一种是当我点击项目时,第二种是当应用程序启动时它必须向我显示 firstPage 作为 id=1..so id 可能等于 2,3,4,5,因为页面滑动......无论如何,Mansoor 的答案是有帮助的,现在它正在工作,但是需要很长时间,也许我应该减少一些无用的代码,lol
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多