안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 ~! 저는 지금 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();
}
}




코드하이라트 기능좀 써주시길.. 본인이봐도 이해 못하실 소스이실텐데
http://www.androidpub.com/index.php?mid=android_dev_qna&document_srl=78641