2012-11-30 50 views
0

我有一個listView,可以讓用戶跟蹤的東西,並刪除項目row.When我按下刪除按鈕,並顯示問題如下。我已經檢查並找到解決方案在網絡上,但我不能瞭解他們的解決方式,也許我的情況與他們不同。任何想法這個問題?java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= -1

logcat的輸出(錯誤):

java.lang.ArrayIndexOutOfBoundsException: length=1; index=-1 
    at java.util.ArrayList.get(ArrayList.java:306) 
    at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 
    at com.example.android.project.ThirdActivity$3$2 
     .onClick(ThirdActivity.java:295) 
    at com.android.internal.app.AlertController$ButtonHandler 
     .handleMessage(AlertController.java:174) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:156) 
    at android.app.ActivityThread.main(ActivityThread.java:4987) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller 
     .run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 

ThirdActivity.java

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();  
    } 
+2

請閱讀onClickListener的文檔。 「哪個」不符合你的想法。 – njzk2

+0

檢測到數據後,您的ListView不會更新。它保存以前的數據。嘗試刷新列表視圖後,檢測數據... –

+0

(我想你的意思'位置') – njzk2

回答

1
if(item[which].equals("Track Location")) 

它 「item」 是你提交給Adapter數據集,你應該使用position代替which

+0

從「which」改變「position」後,它也不起作用。此外,我還將getItem的參數從「which」更改爲「position」。>> String delete =(String)((lv.getAdapter( ))的getItem(位置))。 我改變它們並再次運行後,它在設備上出現堵塞,並且它顯示了「調試當前指令指針」if(item [position] .equals(「Track Location」)) –

+0

yes yes ..... ..- – Blackbelt

0

替換

String delete = (String) ((lv.getAdapter()).getItem(which)); 

String delete = (String) ((lv.getAdapter()).getItem(position)); 
+0

我改變了它,但它不工作... –

相關問題