2012-11-30 2 views
0

나는 사용자가 무언가를 추적하고 항목 row.When 내가 삭제 버튼을 누르면 list.View를 가지고 있으며 그것은 다음과 같은 문제를 보여줍니다. 나는 체크하고 웹상에서 해결책을 찾지 못했습니다. 그들의 해결 방법을 이해하고, 아마도 내 상황이 그들과 다르다. 이 문제에 대한 아이디어?java.lang.ArrayIndexOutOfBoundsException : 길이 = 1; 색인 = -1

로그 캣 출력 (오류) :

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

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

하는 OnClickListener를위한 설명서를 읽어 보시기 바랍니다. ''당신이 생각하는대로하지 않습니다. – njzk2

+0

데이터 검색 후 ListView가 업데이트되지 않습니다. 이전 데이터를 보유합니다. 데이터를 찾은 후에리스트 뷰를 새로 고침 해보십시오 ... –

+0

('position'을 의미한다고 가정합니다) – njzk2

답변

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

을 "item는"당신이 Adapter에 제출 한 데이터 세트, 당신은 which 대신 position를 사용해야입니다

+0

"which"에서 "position"을 변경 한 후에도 작동하지 않습니다. 그 옆에있는 "which">> ​​"delete"(String) ((lv.getAdapter ()). getItem (position)); 내가 그들을 변경하고 다시 실행되면, 그것은 장치에 잼이었고, if (item [position] .equals ("Track Location")) –

+0

예 .....에 대한 "Debug Current Instruction Pointer" ..- – Blackbelt

0

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

나는 이미 그것을 바꿨지만 작동하지 않는다 ... –