Java 通过意图发送数据
存在ListView,它必须在单击项目后将数据发送到另一个活动 这将发送数据:Java 通过意图发送数据,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,存在ListView,它必须在单击项目后将数据发送到另一个活动 这将发送数据: listFavorites.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> listView, View v, int position, long id) { Intent intent = ne
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);
}
此部分工作正常:if(id==0&&getIntent().getExtras().get(额外消息)!=null)
但在这里它不会检查null:
getIntent().getExtras().get(额外消息)=null
它显示为错误
尝试在空对象引用上调用虚拟方法“java.lang.Object android.os.Bundle.get(java.lang.String)”
Thanx在此之前,我感谢您提供的任何帮助和建议,因为您将long值转换为String,它不能为null,因为long的值是通过显示的项目列表预定义的。好吧,我的第一次尝试是重构if块,这样它可以更有效:
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);
}
}
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语句。thx为了快速响应,我写了intent.putExtra(MainActivity.EXTRA_MESSAGE,(int)id);但是它仍然会出错id是一个长的值,所以您将一个较大的值向下转换为一个较小的值,这可能是问题所在。只需删除(int)强制转换。但是在调试代码时,它会返回id,如果(id==0&&getIntent().getExtras().get(EXTRA_MESSAGE)!=null)工作正常,那么现在的主要问题是什么,以便我们能够解决itthx以获得快速响应。你看,我有两种发送数据的方法:第一种是通过意图,正如我写的,第二种是通过id->PageFragment.newInstance(int id)…第一种是当我点击项目时,第二种是当应用程序启动时,它必须以id=1的形式向我显示第一页。所以id可能等于2,3,4,5,因为页面滑动……无论如何,Mansoor的答案是有帮助的,现在它工作了,但这需要很长时间,也许我应该减少一些无用的代码,lolthanx很多,你能解释一下是什么问题吗?
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);
}