只是一个简单的问题,我猜我错过了一些非常容易和明显的东西。访问listview项时调用以下代码,并将id传递给下一个activity。我收到运行时错误,log cat正在向我显示
error:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tim.apps.list/com.tim.apps.list.Challengeview}: java.lang.NumberFormatException: Invalid int: "null"
这是我第一次活动的代码:
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position,
long arg3)
{
String index = (String)adapter.getItemAtPosition(position);
//Intent myIntent = new Intent(ChallengesList.this, Challengeview.class);
//ChallengesList.this.startActivity(myIntent);
Intent i = new Intent(getApplicationContext(), Challengeview.class);
i.putExtra(index, position);
startActivity(i);
}
});
在我的第二次活动中..
Bundle extras = getIntent().getExtras();
String value = extras.getString("index");
//Convert the passed id to a integer
int intvalue = Integer.parseInt(value);
非常感谢大家给予的任何帮助!
答案 0 :(得分:1)
您将项目数据作为键,并且您正在使用密钥"index"
更改
Intent i = new Intent(getApplicationContext(), Challengeview.class);
i.putExtra(index, position);
到
Intent i = new Intent(getApplicationContext(), Challengeview.class);
i.putExtra("index", position);
在检索时,提供相同的密钥"index"
以获取数据..
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("index");
// Convert the passed id to a integer
int intvalue = Integer.parseInt(value);
}
答案 1 :(得分:0)
问题是您在每项活动中使用不同的密钥:
String index = (String) adapter.getItemAtPosition(position);
将返回项目的字符串表示形式。 那么你对自己的意图是:ItemString - &gt;位置 你想要的是:“index” - &gt;位置
答案 2 :(得分:0)
你两端都做错了(发送/接收)。你可以使用它作为i.putExtra(String,String)。在你的情况下,如果你想接收String,那么你只需要发送字符串,因为我正在添加“”到位置。
Intent i = new Intent(getApplicationContext(), Challengeview.class);
i.putExtra("index", ""+position);
startActivity(i);
在接收端你必须这样做。
String value =getIntent().getStringExtras("index");