안녕하세요 지금 파싱을 하여 db에 넣는 작업중에 문제가 생겨 문의 드립니다.

예를 들어 5군데의 site를 xml파싱을 하여 결과를 local db에 넣는 작업입니다.

앱 시작과 동시에 작업을 시작하게 하였는데 테스트 과정으로 개발한  

new Thread(new Runnable() {

public void run() { } }.start()

저런 식으로 5개를 연달아 만들어서 작업을 하면 정상적으로 작업이 진행 합니다.

하지만 해당 작업을 asynctask로 5개 만들거나 위의 소스의 끝나기 전 부분에 다시 파싱과 db insert과정을

거칠 경우 랜덤하게 작업을 완료하지 못하고 있습니다. 

부디 해결책 아시는 분 도움 부탁드립니다.

아래에 제가 실제 사용한 코드인데 아래와 같은 코드를 xml파싱 주소만 바꿔서 5개를 하도록 한 부분입니다.


    new Thread(new Runnable() {

public void run() {

// TODO Auto-generated method stub

String xmlDataDbGame = "xxxxxxxxxxxxx=";

String xmlGameTabelData = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

String enCoderGame = URLEncoder.encode(xmlGameTabelData);

try {

URL xmlUrlGame = new URL("serAddr+xmlDataDbGame+enCoderGame);

pars(xmlUrlGame);

} catch (MalformedURLException e) {

e.printStackTrace();

}

}


private void pars(URL xmlUrlGame) {

XmlPullParserFactory xp;

try {

xp = XmlPullParserFactory.newInstance();

XmlPullParser pr = xp.newPullParser();

try {

pr.setInput(xmlUrlGame.openStream(), "utf-8");

boolean flag = false;

String sTag;

try {

int eventType = pr.getEventType();

while(eventType != XmlPullParser.END_DOCUMENT){

switch(eventType){

case XmlPullParser.START_DOCUMENT:

break;

case XmlPullParser.END_DOCUMENT:

break;

case XmlPullParser.START_TAG:

sTag = pr.getName();

if(sTag.equals("vector")){

flag = true;

}

if(flag){

if(sTag.equals("data vectorkey")){

String sValue = pr.getAttributeValue(0);

}

else if(sTag.equals("game_id")){

String gameId = pr.getAttributeValue(0);

gtgameid.add(gameId);

}else if(sTag.equals("game_name")){

String gameName = pr.getAttributeValue(0);

gtgamename.add(gameName);

}else if(sTag.equals("game_nick")){

String gameNick = pr.getAttributeValue(0);

gtgamenick.add(gameNick);

}else if(sTag.equals("service_yn")){

String serviceYn = pr.getAttributeValue(0);

gtserviceyn.add(serviceYn);

}

}

break;

case XmlPullParser.END_TAG:

sTag = pr.getName();

if(sTag.equals("vector")){

flag = false;

}

break;

case XmlPullParser.TEXT:

break;

}

try {

eventType = pr.next();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

for(int loop = 0; loop < gtgameid.size(); loop++){

gameDb.add(new MapList(gtgameid.get(loop), gtgamename.get(loop), gtgamenick.get(loop), gtserviceyn.get(loop)));

mDbOpenHelper.insertColumnGame(gtgameid.get(loop), gtgamename.get(loop), gtgamenick.get(loop), gtserviceyn.get(loop));

}

}

}).start();



위와 같은 부분을 5개 시작하는데 다른 방법이 없는지 문의 드립니다.