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

DB쿼리 구조와 오류 좀 봐주세요...

0 추천

 

 

우선 이전 액티비티에서 버튼을 클릭하면 현재 시간과 날짜를 읽어옵니다.(화면엔 나오지는 않지만 gps수신하여 현재위치도 수신합니다.) 위의 두값(현재시간과날짜, 현재위치)을 intent로 넘겨서 밑에 소스의 액티비티로 넘겨줍니다.

그 값을 받은 데이터를 나타낸 DB 그림입니다.

 

간신히 db에 넣는것은 성공은 했습니다만.

이걸 Listview에 뿌리질 못하겠네요.

현재는 가장 최신 데이터만 화면에 나타나고

나머지 데이터는 그냥 db에 저장되어 있을뿐입니다. 누적되어 밑으로 쭉 나열하고 싶습니다.

SELECT문을 이용하라고 하셔서  안간힘으로 하고있는데요. 

자바 구조를 거의 몰라서요,.62번줄은 노랑색으로 하이라이트 해놨습니다.

public class dbActivity extends Activity {
 
   ArrayList<String> item;
   ArrayAdapter<String> adapter;
   ListView list;
   TextView data;
 
   Context context;
      DBHelper dbHelper;
  
   final static String dbname = "jyu.db";
   final static int dbVersion = 100;
  
   SQLiteDatabase db;
   String sql;
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     //setContentView(R.layout.activity2nd);
     // TODO Auto-generated method stub    
        
     final Intent intent = getIntent();
     String time = intent.getExtras().getString("time").toString();
     String juso = intent.getExtras().getString("local").toString();
          
     item = new ArrayList<String>();
     item.add(time+juso);
         
     adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_multiple_choice, item);
     //getListView().setTextFilterEnabled(true);
    
     //리스트액티비티의 아이디 찾는 방법은 다르다.
     list = (ListView)findViewById(R.id.list);
  list.setAdapter(adapter); 
  
  adapter.notifyDataSetChanged(); 
  
  //db에 저장
    dbHelper = new DBHelper(this, dbname, null, dbVersion);
    db = dbHelper.getWritableDatabase();
    sql=String.format("INSERT INTO ksj(time,juso) VALUES('%s', '%s');", time, juso);
        Log.d("tag", sql);
    db.execSQL(sql);
    
  
  
   final Button seeButton = (Button)findViewById(R.id.see);
   seeButton.setOnClickListener(new Button.OnClickListener() {
    public void onClick(View v) {
     
     Log.d("DATA", "Search data");
     db = dbHelper.getReadableDatabase();
     sql = "SELECT*FROM ksj;";
     Cursor cursor = db.rawQuery(sql, null);
     
     if(cursor.getCount() > 0) {
      while(cursor.moveToNext()){
       String time = cursor.getString(0);
       Log.d("tag", "cursor.getString1 = "+time);
       String juso = cursor.getString(1);
       Log.d("tag", "cursor.getString2 =" +juso); 
       
       item.add(time+juso);
       adapter.notifyDataSetChanged(); 
      }
     }
     cursor.close();
    }
   });
   dbHelper.close();
 }
 
 public class DBHelper extends SQLiteOpenHelper {
  //생성자
  public DBHelper(Context context, String name, CursorFactory factory, int version) {
   super(context, name, factory, version);
  }
  
        //최초 DB를 만들때 한번만 호출된다.
  @Override
  public void onCreate(SQLiteDatabase db) {
   // TODO Auto-generated method stub
   db.execSQL("CREATE TABLE ksj(_id INTEGER PRIMARY KEY AUTOINCREMENT,"+ "time String not null, juso TEXT not null);");
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // TODO Auto-generated method stub
   db.execSQL("DROP TABLE IF EXISTS ksj");
   onCreate(db);
  }  
 }
}

 

 

06-05 06:02:43.981: E/AndroidRuntime(1103): FATAL EXCEPTION: main
06-05 06:02:43.981: E/AndroidRuntime(1103): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.gps0528/com.example.gps0528.dbActivity}: java.lang.NullPointerException
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.os.Looper.loop(Looper.java:137)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.ActivityThread.main(ActivityThread.java:4424)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at java.lang.reflect.Method.invokeNative(Native Method)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at java.lang.reflect.Method.invoke(Method.java:511)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at dalvik.system.NativeStart.main(Native Method)
06-05 06:02:43.981: E/AndroidRuntime(1103): Caused by: java.lang.NullPointerException
06-05 06:02:43.981: E/AndroidRuntime(1103):  at com.example.gps0528.dbActivity.onCreate(dbActivity.java:62)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.Activity.performCreate(Activity.java:4465)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
06-05 06:02:43.981: E/AndroidRuntime(1103):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
앤드류이드 (6,190 포인트) 님이 2013년 6월 5일 질문
앤드류이드님이 2013년 6월 5일 수정

2개의 답변

0 추천
 
채택된 답변

현재 오류나는   list.setAdapter(adapter); 은 추정컨데 list 라는 객체가 Null 이기 때문일꺼고

그 이유는 ListActivity 를 상속받지 않은채 R.id.list 로부터 LIstview 를 찾고자 했기 때문입니다.

혹시 지난번 답변주 LIstActivity 를 상속받지 않는편이 추후에 좋다고 답변드린것 때문에 Activity 를 상속받는 구조로 가신거라면

layout XML 파일에서 ListView 를 추가하고 아이디를 지정하신 후 그 아이디를 findViewById로 가져다 쓰셔야 합니다.

블랙넥원 (9,600 포인트) 님이 2013년 6월 5일 답변
앤드류이드님이 2013년 6월 5일 채택됨
이것저것 고치다가 지금 소스가 엉킨것 같네여. 말씀대로 해봤는데 똑같은 로그캣을 뿜내요 . 뇌를 초기화시켜서 코딩 다시 해야할것 같네요. 암튼 한가지 더 배워가네요. 감사드려요
0 추천

http://croute.me/193

이 사이트 참조하시고..혹시 리스트 뷰 형태를 좀더 커스터마이징 하실꺼라면

http://micropilot.tistory.com/1656

이 사이트를 참조하세요

블랙넥원 (9,600 포인트) 님이 2013년 6월 5일 답변
...