【问题标题】:Intent extra does not send the right resultIntent extra 不会发送正确的结果
【发布时间】:2014-03-15 14:16:12
【问题描述】:

以下示例取自 BigNerdRanch Android 书籍的第 10 章。 当我的犯罪列表片段开始犯罪片段时,通过额外检索到的 id 与犯罪列表片段中的不同。这会产生空指针异常。此外,在犯罪实验室中,我有一个 if 条件的日志,但它从未被记录,这意味着 if 条件永远不会为真。有人可以帮我解决这个问题吗?

public class CrimeListFragment extends ListFragment {
..
    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        Crime c= ((CrimeAdapter)getListAdapter()).getItem(position);
        Intent i = new Intent(getActivity(), CrimeActivity.class);
        Log.d(TAG, c.getmTitle() + " " + c.getmId());
        i.putExtra(CrimeFragment.EXTRA_CRIME_ID, c.getmId());
        startActivity(i);
    }
..
}

public class CrimeFragment extends Fragment {
..
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        UUID crimeId = (UUID)getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);
                //mCrime = new Crime();
        Log.d(TAG, CrimeLab.get(getActivity()).getCrime(crimeId).getmTitle());
        df = DateFormat.getDateInstance();
    }
..
}

public class CrimeLab {
.. 
       public Crime getCrime(UUID id){
        for (Crime c:mCrimes){          
            if (c.getmId() == id)
                Log.d(TAG, c.getmTitle());
                return c;
        }
        return null;

    }
..
}

03-14 18:30:33.649: D/CrimeListFragment(2162): 犯罪 #2 0bf14f8e-8527-4eae-a5a0-c8a19709a4df 03-14 18:30:33.729: D/CrimeFragment(2162):犯罪#0

【问题讨论】:

  • getmId() 返回什么数据类型?您可能只需要使用getStringExtra()getIntExtra()
  • 它的 UUID,这就是为什么可序列化
  • 哎呀,是的。对不起。我应该看到的。不确定 Intent 额外,但在您的 if 条件下,我认为您应该使用 equals() 而不是 ==

标签: android android-intent fragment


【解决方案1】:

您好,我遇到了同样的问题,花了几个小时来修复它,但现在它在修复了一些愚蠢的错误后开始工作 尝试比较方法

public void onListItemClick(ListView l ,View v,int position, long id) { //犯罪 c =(犯罪)(getListAdapter()).getItem(position); 犯罪 c=((CrimeAdapter)getListAdapter()).getItem(position); //Log.d(TAG, c.getTitle() + "被点击");

    //Start Crime Activity
   Intent i = new Intent(getActivity(),CrimeActivity.class);
   i.putExtra(CrimeFragment.EXTRA_CRIME_ID,c.getId());
   startActivity(i);

}

public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
  //mCrime = new Crime();
  UUID crimeId = (UUID)getActivity().getIntent().getSerializableExtra(EXTRA_CRIME_ID);
  //UUID crimeId = (UUID)getActivity().getIntent().getExtras().getSerializable(EXTRA_CRIME_ID);
 mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);


}

公共犯罪 getCrime(UUID id) { 对于(犯罪 c:mCrimes){ if (c.getId().equals(id)) 返回 c; } 返回空值; }

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2014-12-27
    • 2021-03-15
    • 2016-05-28
    相关资源
    最近更新 更多