1:1로 간단한 채팅을 할 수 있는 코드를 만들고 있습니다.
사용자가 텍스트를 입력하여 전송 버튼을 누르면
데이터베이스에 저장되고 저장된 데이터를 리스트뷰에 출력하고 있습니다.
이제 문제는 전송을 누르면 전에 입력하여 디비에 저장했던 데이터가 계속 같이 출력됩니다.
예를들어, a라는 사람이 안녕하세요? 라고 보냈으면 리스트뷰에 안녕하세요? 만 떴으면 좋겠는데
앞서 대화했던 내용까지 함께 출력이 된다는 겁니다. 코드를 보면 그럴 수 밖에 없습니다..
데이터베이스에 있는 대화내용을 계속 가지고 오도록 되어 있어서요..
이 부분을 어찌 고쳐야 할까요?
밑에 코드를 올립니다. send 버튼을 눌렀을때 thread가 실행되는데 이것은
대화내용을 데이터베이스에 저장하는 역할을 하고
밑에 getDbData가 대화내용을 가지고 오는 함수 입니다.
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new thread().start();
getDbData(http://서버주소); }
});
문제가 되는 getDbData 함수 입니다.
private void getDbData(String string) {
class GetDataJSON extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String uri = params[0];
BufferedReader bufferedReader = null;
try {
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDefaultUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("content-type", "application/x-www-form-urlencoded");
StringBuffer buffer = new StringBuffer();
buffer.append("classof").append("=").append(login.userid).append("&");
buffer.append("code").append("=").append(product.code3).append("&");
OutputStreamWriter outStream = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
PrintWriter writer = new PrintWriter(outStream);
writer.write(buffer.toString());
writer.flush();
InputStreamReader tmp = new InputStreamReader(con.getInputStream(), "UTF-8");
BufferedReader reader = new BufferedReader(tmp);
StringBuilder builder = new StringBuilder();
String str;
while ((str = reader.readLine()) != null) {
builder.append(str + "\n");
}
return builder.toString().trim();
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}
}
protected void onPostExecute(String result) {
myJSON = result;
System.out.println("★★★★★★★★★★"+myJSON);
showList();
}
}
GetDataJSON g = new GetDataJSON();
g.execute(string);
}
protected void showList() {
try {
JSONObject jsonObj = new JSONObject(myJSON);
products = jsonObj.getJSONArray(TAG_DATA);
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
String name = c.getString(TAG_NAME); String comm = c.getString(TAG_COMM);
HashMap<String, String> productss = new HashMap<String, String>();
productss.put(TAG_NAME, name);
productss.put(TAG_COMM, comm);
//잘 출력 됨 System.out.println("파일 이름 잘 출력되는지 확인 : "+image);
productList.add(productss);
}
// 어댑터 생성, R.layout.list_item : Layout ID
SimpleAdapter adapter = new SimpleAdapter(
buying.this, productList, R.layout.chat_list,
new String[]{TAG_NAME, TAG_COMM},
new int[]{R.id.chatName, R.id.chatContent}
);
chatList.setAdapter(adapter); // ListView 에 어댑터 설정
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}