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

DB 활용한 리스트 작성(변수 값이 안들어가네요)

0 추천

아무리 봐도 이유를 못 찾겠습니다

Query()함수에서는 list에 값이 들어가는데 왜 adater에 값을 넣어줄때는 값이 없는걸까요?

log를 찍어본 결과 Query()함수에서는 값이 ArrayList에 들어가는데 adapter에 값을 넣기 전에 Araaylist는 텅텅 비어 있습니다.

전역변수가 이렇게도 초기화가 되나요?

혹시 리스트에 삽입 할려면 어떻게 해야 할까요?

로그 보시면 값이 없음을 확인 할 수 있습니다.

package com.example.admin.mssqltest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
    ArrayList<String> list;
    ArrayAdapter<String> adapter ;
    ListView listView;

    String test;

    private AsyncTask<String, String, String> mTask;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list =  new ArrayList<String>();
        Log.i("", "list 0 :" + list);

        Querythread querythread = new Querythread();
        Log.i("", "list 1 :" + list);

        querythread.start();
        Log.i("", "list 2 :" + list);

        adapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);

    }

    class Querythread extends Thread{
        public void run(){

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Log.i("Android", " MSSQL 접속 준비");
            Query(); //쿼리함수 호출
        }
    }

    public void Query()
    {
        Connection conn = null;

        try {

            Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
            Log.i("Connection","MSSQL 라이브러리 로드");

            conn = DriverManager.getConnection("jdbc:jtds:sqlserver://xxx.xxx.95.184:1433/test","mesapp","dhc8700!?#");
            Log.i("Connection","MSSQL 접속 성공 : "+conn);

            Statement stmt = conn.createStatement();

            //String Query="";
            //stmt.executeUpdate(Query);

            String Query = "select * from dbtest";

            ResultSet reset = stmt.executeQuery(Query);

            while (reset.next()) {
                String no = reset.getString(1);
                String content  = reset.getString(2);
                String memo  = reset.getString(3);
                Log.i("","No:" + no + content + memo);
                list.add(no);
                Log.i("", "list :" + list);
                test=reset.getString(3);
            }
            conn.close();
        }
        catch (Exception e)
        {
            Log.w("Error connection","오류 : " + e);
        }
    }
}

 

Joel12 (220 포인트) 님이 2015년 10월 8일 질문

1개의 답변

0 추천
로그가 출력된 시간을 보세요, 뭐가 먼저 출력이 됬는가.

Query()에서 출력한 로그가 5초 뒤에 출력된거 보이시죠?

질문자님은 Thread에 대해 먼저 공부를 하셔야할 것 같습니다.
익명사용자 님이 2015년 10월 8일 답변
...