마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 리스트뷰 삭제시.....

0 추천

안드로이드-jsp-oracle 연동해서 안드로이드에서 내용을 입력하면 오라클 db에 저장되는것을 구현했습니다.

하지만 어플내에서 롱크릭리스너를 이용해서 꾹 누르면 삭제는 되는데 문제는 오라클db테이블 내용은 삭제가 되지 않습니다.

어떡하면 리스트뷰 삭제와 동시에 db 테이블 내용도 삭제를 할 수 있는지 도움을 요청 하고자 합니다 도와주세요 ㅠㅠ

 

import java.io.*;
import java.util.*;

import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.*;
import org.apache.http.impl.client.*;
import org.apache.http.message.*;
import org.xmlpull.v1.*;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.*;
import android.os.Bundle;
import android.util.*;
import android.view.*;
import android.widget.*;
import android.widget.AdapterView.OnItemLongClickListener;
public class MainActivity extends Activity {

Button btn;
ListView lv;
ArrayList<EmpDTO> list;
CustomAdapter adapter;
 

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lv = (ListView)findViewById(R.id.listView1);


        btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(new View.OnClickListener() {

 public void onClick(View v) {

  Intent intent = new Intent(getApplicationContext(), InsertActivity.class );
  startActivity(intent);
 }
      });
    }

    public InputStream requestGet(String requestURL) {

     Log.i("xxx", "requestGet start");
     try {

      
         HttpClient client = new DefaultHttpClient();

 
         List<NameValuePair> List = new ArrayList<NameValuePair>();


         HttpGet get = new HttpGet(requestURL);


         HttpResponse response = client.execute(get);


         HttpEntity entity = response.getEntity();
         InputStream is = entity.getContent();
         return is ;

  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
    }

    public String streamToString(InputStream is) {

     StringBuffer buffer = new StringBuffer();
     try {

      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
      String str = reader.readLine();
      while(str != null) {
       buffer.append(str+"\n");
       str = reader.readLine();
      }
      reader.close();

  } catch (Exception e) {
   e.printStackTrace();
  }

     return buffer.toString();
    }


    public ArrayList<EmpDTO> getXML(InputStream is) {
     ArrayList<EmpDTO> list = new ArrayList<EmpDTO>();
     Log.i("xxx", "getXML start!");

     try {
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
      XmlPullParser parser = factory.newPullParser();

  parser.setInput(is,"utf-8");

  int eventType = parser.getEventType();

  EmpDTO dto = null;

  while( eventType != XmlPullParser.END_DOCUMENT) {
   switch(eventType) {

   case XmlPullParser.START_TAG:

   String startTag = parser.getName();
   if(startTag.equals("record")){ dto=new EmpDTO();}
   if(dto !=null){

   if(startTag.equals("loc")){ dto.setLoc(parser.nextText()); }
       
   } else { Log.i("xxx", "dto = null"); }
   break;

   case XmlPullParser.END_TAG:

   String endTag = parser.getName();
   if(endTag.equals("record")){ 

   list.add(dto);
   }
  }

   eventType = parser.next();

 }

  for( EmpDTO xx : list){
  Log.i("xxx",""+xx.getLoc());
  }

  } catch (XmlPullParserException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException ie) {
   // TODO Auto-generated catch block
   ie.printStackTrace();
  }
     return list;
    }

 @Override
 protected void onResume() {
  super.onResume();
  String requestURL = "http://192.168.123.189:8181/Orginal/s2a11.jsp";
  InputStream is = requestGet(requestURL);
        
  final ArrayList<EmpDTO> list = getXML(is);
  adapter = new CustomAdapter(getApplicationContext(),list,R.layout.custom_list);
        lv.setAdapter(adapter);
 


        /* 리스트뷰 롱클릭시 삭제 다이얼로그 */
  lv.setOnItemLongClickListener(new OnItemLongClickListener() { 
         
            @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view,
 final int position, long id) {
 AlertDialog diaBox=new AlertDialog.Builder(MainActivity.this)
      .setTitle("삭제")
      .setMessage("해당 조를 삭제하시겠습니까?")      
      .setPositiveButton("YES", new DialogInterface.OnClickListener() {
  public void onClick(DialogInterface dialog, int whichButton) {
  list.remove(position);
  lv.clearChoices();
  adapter.notifyDataSetChanged();
       }
  })
  .setNegativeButton("NO", null)
  .create();
  diaBox.show();
  return false;
  }
      });
}}

 

치비 (180 포인트) 님이 2014년 8월 30일 질문

2개의 답변

0 추천
삭제 다이얼로그가 노출되어 YES 버튼을 누르면

치비님께서 취하시는 행동이

 

1. ArrayList 에서 해당 포지션의 아이템을 제거

2. 리스트뷰 초기화(?, 제가 이함수를 사용하지 않아서 자세히는 모르겠습니다..)

3. 어댑터 변화 감지

 

이 3개 동작인것같은데..

 

코드상으로만 보기에는

DB 조작 행동이 보이지 않아요

당연히 컴퓨터는 프로그래머가 적은 내용그대로 충실히 행하니까..DB에서 삭제되지 않겠죠 ㅎㅎ
안드로이드로우 (15,740 포인트) 님이 2014년 9월 1일 답변
아 저가 아직 개발 초보라서 어플내에서만 삭제되는 기능만 구현한 거였군여... 이걸 또다시 db내에서 삭제해야 할 수 있도록 공부해야겠군여 질문에 대답해주셔서 감사합니다^^
0 추천
롱클릭해서 다이얼로그 띄우고, 예/아니오에 따라서 삭제할 때, 예를 누르는 부분에서

안드로이드 내의 리스트뷰 값만 삭제하는게 아니라, db연동된 오라클 테이블에서도 삭제를 실행하셔야 할 것 같네요.

롱클릭으로 삭제할 열의 pk든 뭐든 겹치지 않는 값을 갖고와서 delete from 테이블명 where 조건;

안의 컬럼값들을 모르니..조건은 님이 채우셔야 할것같군여.

ex) delete from mytable where id='123'; 이런식으로?

 

이런식으로 값을 삭제하셔야 합니다. 값 삭제한 후에 리스트뷰 변수.notifydatasetchanged(); 로 갱신합니다.
anci (19,950 포인트) 님이 2014년 9월 1일 답변
...