본문 바로가기
Study

20110905_안드로인드 DB연계

by hyeongjin's_life 2012. 11. 20.

DB에는 id, title, content가 저장되어 있고,
ListView에는 title과 content가 표시됩니다.
그리고 ListView를 클릭하면 그에 맞는 id값이 다른 액티비티에 전해지게 하려고 합니다..
그 id값으로 DB에 저장된 상세 내용을 다른 액티비티에서 보여주려고 하는 것인데요..
이 id값을 전달을 못하네요..; 커서에서 부터 뭔가 잘못 한거 같습니다..ㅜ.ㅜ

output.java DB내용을 뿌려주는 ListView입니다.
---------------------------------------------------------------
package my.diary;


import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;


public class output extends Activity {

DiaryDBHelper mHelper;
Cursor cursor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.diaryoutput);


mHelper = new DiaryDBHelper(this);

SQLiteDatabase db = mHelper.getWritableDatabase();

cursor = db.rawQuery("SELECT * FROM diary5", null);
startManagingCursor(cursor);

SimpleCursorAdapter Adapter = null;
Adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor, new String[] { "title", "content" },
new int[] { android.R.id.text1, android.R.id.text2});
ListView list = (ListView)findViewById(R.id.ListView01);
list.setAdapter(Adapter);




list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
// TODO Auto-generated method stub


Intent intent = new Intent(output.this, show.class);
intent.putExtra("data_id", cursor.getColumnIndex("id"));
startActivity(intent);


}
});


}
}


--------------------------------------------------------
show.java //전달된 값을 받아주는 곳입니다.
-----------------------------------------------


package my.diary;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class show extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content);

Intent intent = getIntent();

int id = intent.getIntExtra("data_id", 0); //전달된 값을 받음

TextView text_title = (TextView) findViewById(R.id.TextView01); //id값이 제대로 전달 되었는지 찍어주는 곳입니다.

text_title.setText(id);


}
}


---------------------------------------------
많은 고수분들의 도움 간절히 기다리고 있습니다..ㅜ.ㅜ

전체 소스도 첨부했습니다..

-------------------------------------------------답변--------------------------------------------------------

2010.10.05 07:06:45
세이군

혹시 show intent에서 id값이 " "나 마지막id가 표시되지 않나요???
소스를 이렇게 고쳐보세요.
Adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor, new String[] { "title", "content" },
new int[] { android.R.id.text1, android.R.id.text2});
->
Adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor, new String[] { "id", "title", "content" },
new int[] { android.R.id.text1, android.R.id.text2});

이렇게 하면 onItenClick()에서 현재 선택된 id, title, content를 모두 확인할 수 있을 것입니다.
그걸 넘겨주세요.

2010.10.05 11:44:36
hyun82
도움 주셔서 감사합니다..^^
cursor.getColumnIndex("_id") -> cursor.getString(cursor.getColumnIndex("_id"))
으로 수정해 해결했습니다..^^
2010.10.05 20:05:25
세이군
cursor 변수는 리스너 외부에 있는 변수입니다.
이 경우 메모리접근에러가 발생할 여지가 있습니다.
리스너 내부의 변수들을 이용해서 값을 가져오게 수정하시는 것이 좋을 듯 합니다.

'Study' 카테고리의 다른 글

20120711_1차원 배열과 포인터  (0) 2012.11.20
20120630_Java 스터디 1일차  (0) 2012.11.20
20110906_리스트뷰를 내맘대로!!(이미지+텍스트)  (0) 2012.11.20
20110902_나의 안드로이드 첫 작품!!  (0) 2012.11.20
CISC와 RISC  (0) 2012.11.20