지금현재 웹서버를 통해 DataBase의 내용을 불러와 파서한후
리스트뷰에 뿌려 주고 있습니다..
그런데 시간이 오래 걸려 쓰레드로 돌리고 있는데...
잘되지가 않네요
아래의 소스처럼 구현중입니다만, UI 쪽에서 리스트를 뿌려주지 못하고 있습니다..
고수님들 부족한 제 소스를 보시고 참고 해야할 부분을 가르쳐 주십시오 꾸벅
감사합니다.
public class drugs extends Activity implements TextWatcher{
AutoCompleteTextView edit;
String html;
ListView list;
parser Pullparser = new parser();
ArrayAdapter<String> Adapter;
ArrayList<String> listitem1 = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drugs);
Button btn = (Button)findViewById(R.id.button1);
Button btn1 = (Button)findViewById(R.id.button2);
edit = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
list = (ListView)findViewById(R.id.listView1);
Log.d("jihun", "msg=");
edit.addTextChangedListener(this);
new downloadXML().execute();
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(drugs.this,main.class);
startActivity(i);
finish();
}
});
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
menu.add(0, 1, 0, "이름검색").setIcon(R.drawable.search2).setAlphabeticShortcut('a');
menu.add(0, 2, 0, "식별검색").setIcon(R.drawable.search3).setAlphabeticShortcut('a');
menu.add(0, 3, 0, "사진검색").setIcon(R.drawable.search1).setAlphabeticShortcut('a');
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case 1:
return true;
case 2:
Intent i = new Intent(this,sicbeul.class);
startActivity(i);
return true;
case 3:
Intent i1 = new Intent(this,camera.class);
startActivity(i1);
return true;
}
return false;
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
class downloadXML extends AsyncTask<String, Integer, ArrayList<String>>
{
private ArrayList<String> listitem1;
ProgressDialog mProgress = new ProgressDialog(drugs.this);
protected void onPreExecute()
{
mProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgress.setMessage("Wait...");
mProgress.setIndeterminate(false);
mProgress.setCancelable(false);
mProgress.setProgress(0);
mProgress.setMax(100);
mProgress.setSecondaryProgress(0);
mProgress.setButton("취소", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
cancel(true);
}
});
mProgress.show();
}
protected ArrayList<String> doInBackground(String... unused) {
// TODO Auto-generated method stub
Log.d("jihun", "msg=");
Integer values = 0;
HttpGet httpget = new HttpGet("http://xxx.xxx.xxx.xxx:8080/server/server/server.jsp");
DefaultHttpClient client = new DefaultHttpClient();
StringBuilder html = new StringBuilder();
try {
HttpResponse response = client.execute(httpget);
BufferedReader br = new BufferedReader(new
InputStreamReader(response.getEntity().getContent()));
for (;;) {
String line = br.readLine();
if (line == null) break;
html.append(line + '\n');
publishProgress(values*100/54928);
values++;
Log.d("jihun", "msg="+values);
}
br.close();
}
catch (Exception e) {;}
listitem1 = Pullparser.xmlParser(html.toString());
list.setAdapter(new ArrayAdapter<String>(drugs.this, android.R.layout.
simple_list_item_1,listitem1));
edit.setAdapter(new ArrayAdapter<String>(drugs.this,android.R.layout.
simple_dropdown_item_1line,listitem1));
return null;
}
protected void onProgressUpdate(Integer... values){
Log.d("jihun", "msg=");
mProgress.setProgress(values[0]);
}
protected void onPostExecute(String result)
{
super.execute(result);
mProgress.dismiss();
}
protected void onCancelled()
{
mProgress.dismiss();
}
}
}
Thread 부분이 잘 안된다는 말씀이신가요? Ui쪽 update는 일반 Thread로는 처리 못합니다.
아래의 코드를 참조보세요.
mHandler.post(new Runnable() {
public void run() {
// TODO Auto-generated method stub
audioReader.stopReader();
for(int i =0 ; i<viewList.size() ; i++)
{
viewList.get(i).stop_Ani();
viewList.get(i).fire.setVisibility(ImageView.INVISIBLE);
viewList.get(i).bar.setBackgroundResource(R.drawable.candle_blue_small_01);
}
musicStart();
}
Handler에 Post 메소드를 사용해 보세요.
책에서 AsyncTask에 대해서 잘 나와있을겁니다.
onPreExecute(); // 쓰레드 처리 전 UI 처리를 해줄 부분입니다. 주로 Dialog를 생성하죠.
doInBackground(); // 이 부분이 쓰레드에서 처리를 하죠. 곧, UI처리를 못합니다.
onProgressUpdate(); // 중간 작업경과를 표시하기 위해 호출하면 호출됩니다.
onPostExecute(); // 쓰레드로 작업 처리 후 실행되며, UI처리를 하실 수 있습니다.
onCancelled(); // cancel(true);로 작업을 중지하시면 호출 되는 메서드 입니다.




AsyncTask 를 좀더 찾아보시면 도움이 될것 같습니다.
doInBackground() 이 부분에서는 데이터에 대한 처리만을 진행 하시고
다른 곳에서 UI 처리를 하셔야 합니다.