안녕하세요 ~! 저는 지금 listview를 만들고 잇는데요

현재 서버에 요청을 해서 서버의 DB에서 내용을 빼와서 listview에 뿌려주는 부분을 구현중에 있습니다.


현재 액티비티의 구성은 대략 이렇습니다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

ㅣ     리스트뷰          ㅣ

ㅣ                           ㅣ

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

ㅣEditText ㅣ   Buttonㅣ

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ


대략 이런식으로 구성되어 있는데, 

이 액티비티에 들어오면 바로 리스트뷰의 내용이 들어오질 않습니다.


EditText를 한번 눌러야 그제서야 내용이 나옵니다..


제가 예상하는 문제로는 thread에서 listview에 들어올 데이터를 가져올때 문제가 발생되는것같아

여기저기 다 쑤셔보고 runOnUiThread도 건드려보기도 했지만 전혀 모르겠습니다


이런 지식이 너무 절실한지라 여쭙겠습니다 ㅠ.ㅠ...


소스는 다음과 같습니다

 package org.sns;
//import문 생략
public class snsView extends ListActivity {
 Button loginBtn;
 Button writeBtn;
 Button deleteBtn;
 EditText etContent;
 LinearLayout content;
 public static String userid, passwd;
 ArrayList<snsData> list;
 ContentAdapter s_adapter;
 int num = 0;
 private ProgressDialog progress;
 Thread thread;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  setContentView(R.layout.snsview);
  writeBtn = (Button) findViewById(R.id.SNSContentWriteBtn);
  loginBtn = (Button) findViewById(R.id.loginBtn);
  etContent = (EditText) findViewById(R.id.etSNSContent);
  deleteBtn = (Button) findViewById(R.id.snsDeleteBtn);
  list = new ArrayList<snsData>();
  s_adapter = new ContentAdapter(this, R.layout.snscontent, list);
  setListAdapter(s_adapter);
  list.clear();
  select();
  writeBtn.setOnClickListener(new OnClickListener() {
 @Override
   public void onClick(View v) {
    if (LoginStatus.isStatus()) {
     String comment = etContent.getText().toString();
     SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(
       "yyyy.MM.dd HH:mm:ss", Locale.KOREA);
     Date date = new Date();
     String mTime = mSimpleDateFormat.format(date);
     new networkProcess(3, userid, comment, mTime);
     progressProcess();
     etContent.setText("");
     etContent.clearFocus();
     InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
     mgr.hideSoftInputFromWindow(etContent.getWindowToken(), 0);
    }
   }
  });
   }
 public void refreshView() {
  list.clear();
  s_adapter.notifyDataSetChanged();
  select();
 }
 public class ContentAdapter extends ArrayAdapter<snsData> {
  private ArrayList<snsData> items;
  public ContentAdapter(Context context, int textViewResourceId,
    ArrayList<snsData> items) {
   super(context, textViewResourceId, items);
   // TODO Auto-generated constructor stub
   this.items = items;
  }
  public View getView(int position, View convertView, ViewGroup parent) {
   View v = convertView;
   ViewHolder holder;
   if (v == null) {
    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.snscontent, null);
    holder = new ViewHolder(v);
    v.setTag(holder);
   } else
    holder = (ViewHolder) v.getTag();
   snsData data = items.get(position);
   holder.getContent().setText(data.getContent());
   holder.getDate().setText(data.getDate());
   holder.getNick().setText(data.getNick());
   holder.getButton().setTag(Integer.valueOf(position));
   holder.getButton().setOnClickListener(delete);
   holder.getButton().setVisibility(View.INVISIBLE);
   holder.getLayout().setTag(Integer.valueOf(position));
   holder.getLayout().setOnClickListener(layout);
   return v;
  }
 }
 final OnClickListener layout = new OnClickListener() {
  @Override
  public void onClick(View v) {
   int position = (Integer) v.getTag();
   View vi = v;
   ViewHolder holder = new ViewHolder(vi);
   if (userid.equals(list.get(position).getId()))
    holder.getButton().setVisibility(View.VISIBLE);
  }
 };
 final OnClickListener delete = new OnClickListener() {
  @Override
  public void onClick(View v) {
   int position = (Integer) v.getTag();
   viewDeleteConfirm(Integer.valueOf(list.get(position).getNum()));
   progressProcess();
   // refreshView();
  }
 };
 public void viewDeleteConfirm(int num) {
  final int delete = num;
  AlertDialog.Builder alert_confirm = new AlertDialog.Builder(
    snsView.this);
  alert_confirm.setMessage("글을 삭제하시겠습니까 ?").setCancelable(false)
    .setPositiveButton("확인", new DialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface dialog, int which) {
      new networkProcess(4, delete);
     }
    })
    .setNegativeButton("취소", new DialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface dialog, int which) {
      // 'No'
      return;
     }
    });
  AlertDialog alert = alert_confirm.create();
  alert.show();
 }
 class ViewHolder {
  ViewGroup layout;
  View Base;
  TextView content;
  TextView date;
  TextView nick;
  Button deleteBtn;
  ViewHolder(View base) {
   this.Base = base;
  }
  public ViewGroup getLayout() {
   if (layout == null)
    layout = (ViewGroup) Base.findViewById(R.id.snsContentLayout);
   return layout;
  }
  public Button getButton() {
   if (deleteBtn == null)
    deleteBtn = (Button) Base.findViewById(R.id.snsDeleteBtn);
   return deleteBtn;
  }
  public TextView getContent() {
   if (content == null)
    content = (TextView) Base.findViewById(R.id.snsContent);
   return content;
  }
  public TextView getDate() {
   if (date == null)
    date = (TextView) Base.findViewById(R.id.snsDate);
   return date;
  }
  public TextView getNick() {
   if (nick == null)
    nick = (TextView) Base.findViewById(R.id.snsNick);
   return nick;
  }
 }
 void progressProcess() {
  progress = ProgressDialog
    .show(snsView.this, "", "갱신중입니다.", true, false);
  Thread thread = new Thread(new Runnable() {
   @Override
   public void run() {
    mHandler.sendEmptyMessage(0);
   }
  });
  thread.start();
 }
 private Handler mHandler = new Handler() {
  public void handleMessage(Message msg) {
   progress.dismiss(); // 다이얼로그 삭제
  }
 };
 public void select() {
  final ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
   @Override
   public String handleResponse(HttpResponse response)
     throws ClientProtocolException, IOException {
    String xml = null;
    HttpEntity entity = response.getEntity();
    xml = EntityUtils.toString(entity);
    XMLHandler parser = new XMLHandler();
    Document doc = parser.getDomElement(xml);
    NodeList nl = doc.getElementsByTagName("comment");
    Log.v("length :", String.valueOf(nl.getLength()));
    for (int i = 0; i < nl.getLength(); i++) {
     Element e = (Element) nl.item(i);
     String content = parser.getValue(e, "content");
     String date = parser.getValue(e, "date");
     String nick = parser.getValue(e, "nick");
     String num = parser.getValue(e, "num");
     String id = parser.getValue(e, "id");
     list.add(new snsData(num, id, content, date, nick));
     //s_adapter.notifyDataSetChanged();
    }
    return xml;
   }
  };
  new Thread() {
   @Override
   public void run() {
    String url = "http://192.168.0.11:8080/webserver/M-EYE/server/select.jsp";
    HttpClient http = new DefaultHttpClient();
    try {
     // 서버에 전달할 파라메터 세팅
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
     HttpPost httpPost = new HttpPost(url);
     UrlEncodedFormEntity entityRequest = new UrlEncodedFormEntity(
       nameValuePairs, "UTF-8");
     httpPost.setEntity(entityRequest);
     http.execute(httpPost, responseHandler);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
   
  }.start();
 }
}