안드로이드 개발 질문/답변
(글 수 45,052)
우선 질문이 길고 난해해서 뒤로가기 누르시고싶은마음 100번 이해하지만 저좀 살려주세요...일본회사와서 친구도없고 가족도없고 자바도 처음인데 혼자해야되고 저 힘들어요...ㅠㅠ
먼저 책장 어플이구요. 메인화면에 저장해놓은 책들이 각각 이미지+텍스트로 나와있고 책이미지를 클릭하면 팝업창이 나와서 자세하게 보여주는겁니다.
책이 5권있으면 총5권분의 DB가 있겠죠?
근데 책 하나를 클릭하면 detailview에는 그 한권의 정보만 보입니다
이건 select문의 where을 이용해서 원하는 레코드만 뽑아오는거죠
근데 그 Where 레코드명 = ...
이런식은데 우와...도대체 클릭한걸로 어떻게 저걸 판단할지 도무지 모르겠는겁니다.
결과적으로 제가하려는건
책 목록중 클릭한 책의 DB만 뽑아서 트위터로 전송하려고 하는데...
detailview(클릭했을때 클릭한 책 정보만 나타나는거)가 제가 하고자하는 책 한권의 정보만을 뽑아내는 기능을 수행하고있기때문에 이걸 참조하기로 했습니다. 근데...뻥안치고 이 짧은 부분만 14시간 넘게봤는데 정말 모르겠어요 ㅠㅠ
그래서 의심가는거 한부분 올려봅니다 부탁드릴게요 ㅠㅠ
public String Detail_RecordNo=null;
public void Show_Dialog_BookDetail(Context context, String BookNo){
String strBookName = null;
Detail_RecordNo = BookNo;
final Dialog dialogBookDetail = new Dialog( context );
dialogBookDetail.setContentView( R.layout.book_detailveiw );
ImageView ImageView = (ImageView) dialogBookDetail.findViewById(R.id.ImageView01_bookdetail);
TextView lblList = (TextView) dialogBookDetail.findViewById(R.id.TextView01_bookdetail);
TextView lblList_No = (TextView) dialogBookDetail.findViewById(R.id.TextView05_bookdetail);
TextView lblList_Note = (TextView) dialogBookDetail.findViewById(R.id.TextView02_bookdetail);
Button twitter = (Button) findViewById(R.id.twbtn);
TextView lblList_Category = (TextView) dialogBookDetail.findViewById(R.id.TextView06_bookdetail);
EditText_Note = (EditText) dialogBookDetail.findViewById(R.id.EditText01_bookdetail);
TextView lblList_InsertTime = (TextView) dialogBookDetail.findViewById(R.id.TextView03_bookdetail);
CheckBox checkBox01_bookdetail = (CheckBox) dialogBookDetail.findViewById(R.id.checkBox01_bookdetail);
CheckBox checkBox02_bookdetail = (CheckBox) dialogBookDetail.findViewById(R.id.checkBox02_bookdetail);
strBookName = Book_Once_Detail_View(this,"No",BookNo,ImageView,lblList,
lblList_No,lblList_Note,twitter,EditText_Note,lblList_InsertTime,
checkBox01_bookdetail,checkBox02_bookdetail,lblList_Category);
TextView lblList = (TextView) dialogBookDetail.findViewById(R.id.TextView01_bookdetail);
TextView lblList_No = (TextView) dialogBookDetail.findViewById(R.id.TextView05_bookdetail);
TextView lblList_Note = (TextView) dialogBookDetail.findViewById(R.id.TextView02_bookdetail);
Button twitter = (Button) findViewById(R.id.twbtn);
TextView lblList_Category = (TextView) dialogBookDetail.findViewById(R.id.TextView06_bookdetail);
EditText_Note = (EditText) dialogBookDetail.findViewById(R.id.EditText01_bookdetail);
TextView lblList_InsertTime = (TextView) dialogBookDetail.findViewById(R.id.TextView03_bookdetail);
CheckBox checkBox01_bookdetail = (CheckBox) dialogBookDetail.findViewById(R.id.checkBox01_bookdetail);
CheckBox checkBox02_bookdetail = (CheckBox) dialogBookDetail.findViewById(R.id.checkBox02_bookdetail);
strBookName = Book_Once_Detail_View(this,"No",BookNo,ImageView,lblList,
lblList_No,lblList_Note,twitter,EditText_Note,lblList_InsertTime,
checkBox01_bookdetail,checkBox02_bookdetail,lblList_Category);
dialogBookDetail.setTitle(getCutUTFString(strBookName,15,"..."));
checkBox01_bookdetail.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, //保有check
boolean isChecked) {
if(isChecked){
Database_Activity_BasicSQL.Update_Info(Database_Activity_Main_Display_02.this,Detail_RecordNo,
"ReadInfo","1");
}else{
Database_Activity_BasicSQL.Update_Info(Database_Activity_Main_Display_02.this,Detail_RecordNo,
"ReadInfo","0");
}
}
});
checkBox01_bookdetail.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, //保有check
boolean isChecked) {
if(isChecked){
Database_Activity_BasicSQL.Update_Info(Database_Activity_Main_Display_02.this,Detail_RecordNo,
"ReadInfo","1");
}else{
Database_Activity_BasicSQL.Update_Info(Database_Activity_Main_Display_02.this,Detail_RecordNo,
"ReadInfo","0");
}
}
});
먼저 detail_recordNo를 보시면 스트링으로 선언해줬고 안에 뭔지 모를 BookNo라는 스트링형식의 변수를 집어넣어줬습니다. Db에 No라는 필드는있어도 BookNo라는 필드는없으니까 일단 DB의 필드를 참조할 이름인 것 같지는 않은데요 일단 수상합니다.
이쪽부분소스는 디테일뷰에서 체크박스가 있고 체크하면 DB에 1들어가고 체크안되면 0이 들어가는 소스입니다.
그 많은 ReadInfo필드중에서 클릭해서 디테일뷰로 보고있는 책의 ReadInfo 레코드에만 1 또는 0이 들어가는거죠. 제가 하려고하는것과 확실히 연관이 있어보입니다. 여기서 Detail_RecordNo가 좀 많이 수상하네요. 저게 뭘 의미하는걸까요 String Detail_RecordNo = String BookNo
Detail_RecordNo 에는String형식의 BookNo라는 변수만 들어가있을뿐 BookNo에 어떤값도 들어가있지 않습니다. 참 이해가 안되네요 ...
두번째로 파랑색이 들어간부분있죠? 그 파란색 이름으로된 메소드를 밑에 적어보겠습니다
public String Book_Once_Detail_View(Context context, String Selection,
String selectionArgsStr,
ImageView ImageView,
TextView lblList,
TextView lblList_No,
TextView lblList_Note,
Button twitter,
EditText EditText_Note,
TextView lblList_InsertTime,
CheckBox checkBox01_bookdetail,
CheckBox checkBox02_bookdetail,
TextView lblList_Category){
String selectionArgsStr,
ImageView ImageView,
TextView lblList,
TextView lblList_No,
TextView lblList_Note,
Button twitter,
EditText EditText_Note,
TextView lblList_InsertTime,
CheckBox checkBox01_bookdetail,
CheckBox checkBox02_bookdetail,
TextView lblList_Category){
String[] cols = {"No","BookName","ImagePath","Price","ISBN","Writer","AmazonPageURL","Note","InsertDateTime","ReadInfo","KeepInfo","Category"};
String selection = "No = ?";
//String selection = Selection + " = ?";
String[] selectionArgs = {selectionArgsStr};
String groupBy = null;
String having = null;
String orderBy = null;
Database_Class_MakeDatabase dbHelper = new Database_Class_MakeDatabase(context);
SQLiteDatabase db=dbHelper.getReadableDatabase();
StringBuilder text = new StringBuilder();
String strImagePath = null;
String Book_Name = null;
String Book_Note = null;
//long InsertTime = 0;
String InsertTime = null;
String Category = null;
int intChkInfo_01 = 0;
int intChkInfo_02 = 0;
try{
Cursor cursor = db.query("T_MyBookShelf", cols, selection, selectionArgs, groupBy, having, orderBy);
String selection = "No = ?";
//String selection = Selection + " = ?";
String[] selectionArgs = {selectionArgsStr};
String groupBy = null;
String having = null;
String orderBy = null;
Database_Class_MakeDatabase dbHelper = new Database_Class_MakeDatabase(context);
SQLiteDatabase db=dbHelper.getReadableDatabase();
StringBuilder text = new StringBuilder();
String strImagePath = null;
String Book_Name = null;
String Book_Note = null;
//long InsertTime = 0;
String InsertTime = null;
String Category = null;
int intChkInfo_01 = 0;
int intChkInfo_02 = 0;
try{
Cursor cursor = db.query("T_MyBookShelf", cols, selection, selectionArgs, groupBy, having, orderBy);
이부분입니다.
DB에서 원하는 필드의 원하는 레코드만 출력한다
select문의 where이죠.
여기서 보면
SELECT cols FROM T_MyBookShelf WHERE No = selectionArgs
인데요. 제가 원하는건 그거죠 결국 where을 어떻게 내가 클릭한 책의 정보만 받느냐
여기선 string의 selectionargs를 넣었습니다.근데 콘 칙쇼
아니 selectionargs는 스트링 변수로 선언만해놓고 이 안에 어떤 값이 들어간다는 아무런 얘기도 없는데 이게 도대체 뭔소린지 모르겠습니다 아우 ㅠ.ㅠ....진짜
제가 보기로는 제가 하고자하는걸 찾기위한 소스는 위의 두개가 전부인 것 같은데 저 위의 두 소스에 제가 구현하고자 하는 기능을 나타내는 부분이 있긴있나요?제가 쓸대없는데서 헛물켜고있는건가요
마지막으로 위에적은 소스 아랫부분인데
while (cursor.moveToNext()){
//text.append(cursor.getInt(0));
text.append(cursor.getString(1));
text.append("\n" + getString(R.string.ISBN) + cursor.getString(4));
text.append("\n" + getString(R.string.Writer) + cursor.getString(5));
text.append("\n" + getString(R.string.Price) + cursor.getString(3));
text.append("\n" + getString(R.string.Category) + cursor.getString(11));
//text.append("\n");
strImagePath = cursor.getString(2);
Book_Name = cursor.getString(1);
Book_Note = cursor.getString(7);
//InsertTime = cursor.getLong(8);
InsertTime = cursor.getString(8);
StringBuffer InsertDate = new StringBuffer(InsertTime);
InsertDate.insert(4, "/");
InsertDate.insert(7, "/");
text.append("\n" + getString(R.string.Date) + InsertDate);
intChkInfo_01 = cursor.getInt(9);
intChkInfo_02 = cursor.getInt(10);
Category = cursor.getString(11);
}
}finally{
db.close();
}
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/barcodes/" + strImagePath);
//Bitmap bitmap_resize = Bitmap.createScaledBitmap(bitmap, 160, 200, true);
//ImageView.setImageBitmap(bitmap_resize);
ImageView.setImageBitmap(bitmap);
ImageView.setScaleType(ScaleType.FIT_CENTER);
lblList.setText(text);
lblList_Note.setText(getString(R.string.Memo));
lblList_Category.setText(Category);
EditText_Note.setText(Book_Note);
//text.append(cursor.getInt(0));
text.append(cursor.getString(1));
text.append("\n" + getString(R.string.ISBN) + cursor.getString(4));
text.append("\n" + getString(R.string.Writer) + cursor.getString(5));
text.append("\n" + getString(R.string.Price) + cursor.getString(3));
text.append("\n" + getString(R.string.Category) + cursor.getString(11));
//text.append("\n");
strImagePath = cursor.getString(2);
Book_Name = cursor.getString(1);
Book_Note = cursor.getString(7);
//InsertTime = cursor.getLong(8);
InsertTime = cursor.getString(8);
StringBuffer InsertDate = new StringBuffer(InsertTime);
InsertDate.insert(4, "/");
InsertDate.insert(7, "/");
text.append("\n" + getString(R.string.Date) + InsertDate);
intChkInfo_01 = cursor.getInt(9);
intChkInfo_02 = cursor.getInt(10);
Category = cursor.getString(11);
}
}finally{
db.close();
}
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/barcodes/" + strImagePath);
//Bitmap bitmap_resize = Bitmap.createScaledBitmap(bitmap, 160, 200, true);
//ImageView.setImageBitmap(bitmap_resize);
ImageView.setImageBitmap(bitmap);
ImageView.setScaleType(ScaleType.FIT_CENTER);
lblList.setText(text);
lblList_Note.setText(getString(R.string.Memo));
lblList_Category.setText(Category);
EditText_Note.setText(Book_Note);
ImageView.setScaleType(ScaleType.FIT_CENTER);
//lblList_InsertTime.setText("登録日:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(InsertTime));
if(intChkInfo_01 != 0){checkBox01_bookdetail.setChecked(true);}
else{checkBox01_bookdetail.setChecked(false);}
if(intChkInfo_02 != 0){checkBox02_bookdetail.setChecked(true);}
else{checkBox02_bookdetail.setChecked(false);}
//lblList_InsertTime.setText("登録日:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(InsertTime));
if(intChkInfo_01 != 0){checkBox01_bookdetail.setChecked(true);}
else{checkBox01_bookdetail.setChecked(false);}
if(intChkInfo_02 != 0){checkBox02_bookdetail.setChecked(true);}
else{checkBox02_bookdetail.setChecked(false);}
return Book_Name;
}
빨간 줄 처진 lblList에 text가 들어가잖아요
}
빨간 줄 처진 lblList에 text가 들어가잖아요
저lblList에 들어간 text값을 다른 엑티비티에서 그대로 참조할 수 있을까요?
그게 가능하면 짜증나게 twitter 엑티비티에서 db 셀렉트하는거 구현안하고 저거 값 받아서 트위터로 보내면 Ok인데...근데 생각은 해서 lblList 막 전역변수로 줘서 위에서 호출해보고 하면 안에 값은 안들어있고 ; 다르게하면 에러나고 생각처럼 안되더라구요...계획상으로는 이 방법이 가장 이상적인데...
제발도와주세요




안녕하세요. 제가 볼때는 BookNo으로 테이블에서 책을 참조하는 것같은데요. 정말 아무것도 안들어 가 있는건지... SQL문에 들어가기 전에 selectionArgs에도 값이 안들어 있나요? 본인이 처음부터 작성하신건지... 아닌지 모르겠는데... 본인이 하시게 아니라면 소스에 대해서 질문을 드려도 모르시겠네요?
엑티비티간에 데이터 전송은 주로 putExtra로 보내서 getExtra로 받는 방법을 주로 씁니다. Twitter액티비티에서 한번더 디비에서 읽어 온다면 그럴 이유가 있을 수 있을 겁니다. 사양서가 그렇게 되있다던가... 데이터의 정확성을 위해서 라든가.... 그런데 twitter에 책번호 NO는 안쓰고 이름만 쓴다면 그런것도 아니겠네요.
참고로 저도 일본에서 근무하고 있습니다. 힘내세요.