마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리스트 출력관련 질문입니다.

0 추천

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();
    }
섭구 (370 포인트) 님이 2018년 8월 26일 질문

1개의 답변

+1 추천
제생각에는 getData 함수는 채팅 대화창 뷰가 로딩된 시점에서 채팅창을 그려주기(?)위해 필요한함수지 send버튼을 눌렀을때 호출되어야 하는 함수가 아닌거같습니다. 저렇게 되면 send버튼을 누를때 대화목록 전체를 다 긁어오니 당연히 보여졌던 대화내용이 다시 또 추가되겠지요. send버튼을 눌렀을때 호출되어야 하는 함수로직은 기존 채팅 대화내용에 추가로 작성된 메시지데이터를 DB테이블에 추가되는 로직인것 같구요.  도움이 되길바랍니다. 화이팅!
idontknow (6,380 포인트) 님이 2018년 8월 26일 답변
답변 감사합니다.
말씀 해주신대로 함수를 따로 분리해서
수정하니 잘 나오네요^^
...