Android java.lang.ArrayIndexOutOfBoundsException:长度=1;索引=-1
我有一个listView,可以让用户跟踪某些内容并删除项目行。当我按下delete按钮时,它显示问题如下。我已经在web上检查并找到解决方案,但我无法理解他们的解决方法,可能我的情况与他们不同。对这个问题有什么想法吗 Logcat输出(错误): ThirdActivity.javaAndroid java.lang.ArrayIndexOutOfBoundsException:长度=1;索引=-1,android,listview,arraylist,Android,Listview,Arraylist,我有一个listView,可以让用户跟踪某些内容并删除项目行。当我按下delete按钮时,它显示问题如下。我已经在web上检查并找到解决方案,但我无法理解他们的解决方法,可能我的情况与他们不同。对这个问题有什么想法吗 Logcat输出(错误): ThirdActivity.java friend = new ArrayList<String>(Arrays.asList(result.split("[*]"))); public void onListItemClick(L
friend = new ArrayList<String>(Arrays.asList(result.split("[*]")));
public void onListItemClick(ListView parent, View v, final int position, long id){
AlertDialog.Builder adb = new AlertDialog.Builder(ThirdActivity.this);
adb.setItems(item, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(item[which].equals("Track Location")){
...
}else{
AlertDialog.Builder adb=new AlertDialog.Builder(ThirdActivity.this);
adb.setTitle("Delete?");
adb.setMessage("Are you sure you want to delete " + (String) lv.getItemAtPosition(position));
final int positionToRemove = position;
adb.setNegativeButton("Cancel", null);
adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, final int which) {
new Thread(){
public void run(){
try{
httpclient = new DefaultHttpClient();
httppost = new HttpPost("http://www.kryptoquest.com/tracker/remove.php");
nameValuePairs = new ArrayList<NameValuePair>(2);
Log.d("12345678",user);
nameValuePairs.add(new BasicNameValuePair("Targetname", (String) lv.getItemAtPosition(position)));
nameValuePairs.add(new BasicNameValuePair("Username", user));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = httpclient.execute(httppost);
is = response.getEntity().getContent();
}catch(Exception e){
Log.e("log_tag", "Error:"+e.toString());
}
//convert response to string
try{
reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
sb = new StringBuilder();
line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
Log.d("test",sb.toString());
is.close();
result = sb.toString();
runOnUiThread(new Runnable()
{
public void run()
{
Toast.makeText(ThirdActivity.this, result + lv.getItemAtPosition(position), Toast.LENGTH_LONG).show();
}
});
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
}
}.start();
String delete = (String) ((lv.getAdapter()).getItem(which));
friend.remove(delete);
friend.trimToSize();
adapter.notifyDataSetChanged();
}});
adb.show();
}
}
});
AlertDialog ad = adb.create();
ad.show();
}
friend=newarraylist(Arrays.asList(result.split([*]);
public void onListItemClick(ListView父视图、视图v、最终整数位置、长id){
AlertDialog.Builder adb=新建AlertDialog.Builder(ThirdActivity.this);
adb.setItems(项,新的DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int其中){
if(项[which].equals(“轨道位置”)){
...
}否则{
AlertDialog.Builder adb=新建AlertDialog.Builder(ThirdActivity.this);
adb.setTitle(“删除?”);
setMessage(“您确定要删除”+(字符串)lv.getItemAtPosition(位置));
最终int位置ToRemove=位置;
adb.setNegativeButton(“取消”,空);
adb.setPositiveButton(“确定”,新建AlertDialog.OnClickListener(){
public void onClick(DialogInterface dialog,final int其中){
新线程(){
公开募捐{
试一试{
httpclient=新的DefaultHttpClient();
httppost=新的httppost(“http://www.kryptoquest.com/tracker/remove.php");
nameValuePairs=新的ArrayList(2);
Log.d(“12345678”,用户);
添加(新的BasicNameValuePair(“Targetname”,(String)lv.getItemAtPosition(position));
添加(新的BasicNameValuePair(“用户名”,用户));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
response=httpclient.execute(httppost);
is=response.getEntity().getContent();
}捕获(例外e){
Log.e(“Log_标记”,“错误:+e.toString());
}
//将响应转换为字符串
试一试{
reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8);
sb=新的StringBuilder();
行=空;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
Log.d(“test”,sb.toString());
is.close();
结果=sb.toString();
runOnUiThread(新的Runnable()
{
公开募捐
{
Toast.makeText(ThirdActivity.this,result+lv.getItemAtPosition(position),Toast.LENGTH_LONG.show();
}
});
}捕获(例外e){
Log.e(“Log_标记”,“错误转换结果”+e.toString());
}
}
}.start();
stringdelete=(String)((lv.getAdapter()).getItem(which));
删除(删除);
friend.trimToSize();
adapter.notifyDataSetChanged();
}});
adb.show();
}
}
});
AlertDialog ad=adb.create();
广告秀();
}
它“项
”是您提交给适配器的数据集
,您应该使用位置
,而不是,后者
替换
String delete = (String) ((lv.getAdapter()).getItem(which));
与
请阅读onClickListener的文档
它不符合您的想法。检测数据后,您的ListView不会更新。它保存以前的数据。尝试刷新ListVIEW,在检测到数据之后……(我假设你是指<代码>位置>代码>)请考虑将你的<代码>线程<代码>提取到一个内部类或单独的文件中,以获得更多的可读性。在从“哪个”改变“位置”之后,它也不起作用。除此之外,我还将GTIETEM的参数从“哪个”改为“位置”。>>字符串删除=(字符串)((lv.getAdapter()).getItem(position));在我更改它们并再次运行之后,它在设备上被阻塞,并且它显示了指向if(item[position].equals(“Track Location”))的“Debug Current Instruction Pointer”(调试当前指令指针)
if(item[which].equals("Track Location"))
String delete = (String) ((lv.getAdapter()).getItem(which));
String delete = (String) ((lv.getAdapter()).getItem(position));