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

DB에서 가져와 리스트뷰에 뿌려주는데..리스트뷰를 스크롤하면 뻗어요..

0 추천
package com.example.test;

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.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;


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

    @Override
    protected void onCreate(Bundle savedInstanceState) {

    	
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     	
                
		list = new ArrayList<String>();
    	adapter = new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_1, list);

    	listView = (ListView)findViewById(R.id.list);
    	listView.setAdapter(adapter);

       	
    	handler.sendEmptyMessage(1);

     	

    }
    
	final Handler handler = new Handler(){
		   public void handleMessage(Message msg){
		           super.handleMessage(msg);
		          
		           Log.d("Log", "1 sec");
		           new MyAsyncTask().execute();
		           
		           this.sendEmptyMessageDelayed(0, 1000);
		          
		   }
		};

	
    public void query2()
    {
	    Log.i("Android"," MSSQL Connect Example.");
	    Connection conn = null;
	    
	    
	    
	    try {
	
			    Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
			    Log.i("Connection","MSSQL driver load");
			    
			    conn = DriverManager.getConnection("jdbc:jtds:sqlserver://서버주소/DB이름","아이디","패스워드");
			    Log.i("Connection","MSSQL open");
			    Statement stmt = conn.createStatement();
			    ResultSet reset = stmt.executeQuery("select * from v_state where userid='camc'");
			
			    
			    //Print the data to the console
			    while(reset.next()){
			    	list.add(reset.getString(12)+" "+reset.getString(1)+" "+reset.getString(4)+" "+reset.getString(5)+" "+reset.getString(6));
			    }
			    
			    conn.close();
	    	} 
	    
	    catch (Exception e)
		    {
		    	Log.w("Error connection","" + e.getMessage());
		    }
	  }
    
    
    
    public class MyAsyncTask extends AsyncTask<String, String, String>{
    	 
       // @Override
        protected void onPreExecute() {
        	list.clear();
        }
         
       // @Override
        protected String doInBackground(String... params) {
             
			query2();	 	
			
			return null;
        }
         
        //@Override
        protected void onPostExecute(String result) {
        	adapter.notifyDataSetChanged();
        }
         
        //@Override
        protected void onCancelled() {
            super.onCancelled();
        }


    }
}

 

Logcat에 아래같은 메시지가 뜨면서 에러가 나버립니다..
 
02-18 19:36:13.458: E/InputEventReceiver(7082): Exception dispatching input event.
 
 
익명사용자 님이 2013년 2월 18일 질문

1개의 답변

0 추천
오류 로그좀 제대로 올려주세요...

저걸론 몰라요
수상한i (8,050 포인트) 님이 2013년 2월 19일 답변
아래처럼 에러가 납니다..

2-19 16:39:19.722: I/Android(877):  MSSQL Connect Example.
02-19 16:39:19.722: I/Connection(877): MSSQL driver load
02-19 16:39:19.852: E/InputEventReceiver(877): Exception dispatching input event.
02-19 16:39:19.852: W/dalvikvm(877): threadid=1: thread exiting with uncaught exception (group=0x4158d438)
02-19 16:39:19.862: E/AndroidRuntime(877): FATAL EXCEPTION: main
02-19 16:39:19.862: E/AndroidRuntime(877): java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
02-19 16:39:19.862: E/AndroidRuntime(877):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
02-19 16:39:19.862: E/AndroidRuntime(877):     at java.util.ArrayList.get(ArrayList.java:304)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.AbsListView.obtainView(AbsListView.java:2290)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ListView.makeAndAddView(ListView.java:1771)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ListView.fillUp(ListView.java:708)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ListView.correctTooHigh(ListView.java:1397)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.ListView.fillGap(ListView.java:637)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5285)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3244)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.widget.AbsListView.onTouchEvent(AbsListView.java:3672)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.View.dispatchTouchEvent(View.java:7159)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2170)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1905)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
02-19 16:39:19.862: E/AndroidRuntime(877):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2196)
02-19 16:39:19.862: E/AndroidRuntime(877):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.app.Activity.dispatchTouchEvent(Activity.java:2607)
02-19 16:39:19.862: E/AndroidRuntime(877):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2145)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.View.dispatchPointerEvent(View.java:7339)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3215)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3160)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4209)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4188)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4312)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:163)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4259)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4331)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.Choreographer.doFrame(Choreographer.java:523)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.os.Handler.handleCallback(Handler.java:615)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.os.Looper.loop(Looper.java:137)
02-19 16:39:19.862: E/AndroidRuntime(877):     at android.app.ActivityThread.main(ActivityThread.java:4885)
02-19 16:39:19.862: E/AndroidRuntime(877):     at java.lang.reflect.Method.invokeNative(Native Method)
02-19 16:39:19.862: E/AndroidRuntime(877):     at java.lang.reflect.Method.invoke(Method.java:511)
02-19 16:39:19.862: E/AndroidRuntime(877):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
02-19 16:39:19.862: E/AndroidRuntime(877):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
02-19 16:39:19.862: E/AndroidRuntime(877):     at dalvik.system.NativeStart.main(Native Method)
BaseAdpater을 상속하고 ListAdapter을 구현해서 아답터를 하나 만드세요
list의 count가 0인겁니다
비어있다는거죠;;
...