-
and_181122Android 2018. 11. 22. 22:18
변수를 할당해야하는지
하지 말고 바로 실행시킬지는
변수의 사용횟수에 따른다.
1회 --> 사용 X
2회 이상 사용 --> 할당 O
package com.example.kgitbank.kakao;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.kgitbank.kakao.Memeber;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
public class MemberList extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.member_list);
final Context ctx = MemberList.this;
final ListView mbrList = findViewById(R.id.mbrList);
final ItemList query = new ItemList(ctx);
mbrList.setAdapter(new MemberAdapter(ctx, (ArrayList<Memeber>) new Main.ListService() {
@Override
public List<?> perform() {
return query.execute();
}
}.perform()));
findViewById(R.id.btnAdd).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ctx, MemberDetail.class));
}
});
//Detail 처리하는 부분
mbrList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> p, View v, int i, long l) {
Memeber m = (Memeber) mbrList.getItemAtPosition(i);
Log.d("선택한 ID",m.seq+"");
Intent intent = new Intent(ctx, MemberDetail.class);
intent.putExtra("seq",String.valueOf(m.seq));
startActivity(intent);
}
});
//삭제 처리 길게 누른거
mbrList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
return false;
}
});
}//OnCreate end
//데이터 베이스에 대한 접근쿼리
private class ListQuery extends Main.QueryFactory {//DB접근 권한은 제한한다 .
SQLiteOpenHelper helper;
public ListQuery(Context ctx) {
super(ctx);
helper = new Main.SqliteHelper(ctx);
}
@Override
public SQLiteDatabase getDatabase() {
return helper.getReadableDatabase();
}//데이터베이스를 관리함
}//ListQuery end
private class ItemList extends ListQuery {
public ItemList(Context ctx) {
super(ctx);
}
public ArrayList<Memeber> execute() {
ArrayList<Memeber> ls = new ArrayList<>();
Cursor c = this.getDatabase().rawQuery(
"SELECT * FROM MEMBER", null
);
Memeber m = null;
if (c != null) {
Log.d("excute", "2");
while (c.moveToNext()) {
m = new Memeber();
m.setSeq(Integer.parseInt(c.getString(c.getColumnIndex(DBInfo.MBR_SEQ))));
m.setPass(c.getString(c.getColumnIndex(DBInfo.MBR_PASS)));
m.setName(c.getString(c.getColumnIndex(DBInfo.MBR_NAME)));
m.setAddr(c.getString(c.getColumnIndex(DBInfo.MBR_ADDR)));
m.setEmail(c.getString(c.getColumnIndex(DBInfo.MBR_EMAIL)));
m.setPhone(c.getString(c.getColumnIndex(DBInfo.MBR_PHONE)));
m.setPhoto(c.getString(c.getColumnIndex(DBInfo.MBR_PHOTO)));
ls.add(m);
}
} else {
Log.d("등록된 회원은 ", "없습니다.");
}
Log.d("excute", "3");
return ls;
}
}
/*아이템관련 파트 */
private class MemberAdapter extends BaseAdapter {
ArrayList<Memeber> ls;
Context ctx;
LayoutInflater inflater;//글자 새긴 풍선
public MemberAdapter(Context ctx, ArrayList<Memeber> ls) {
this.ls = ls;
this.ctx = ctx;
this.inflater = LayoutInflater.from(ctx);
}
@Override
public int getCount() {
return ls.size();
}
@Override
public Object getItem(int i) {
return ls.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View v, ViewGroup g) {
ViewHolder holder;
if (v == null) {
v = inflater.inflate(R.layout.mbr_item, null);
holder = new ViewHolder();
holder.photo = v.findViewById(R.id.photo);
holder.name = v.findViewById(R.id.name);
holder.phone = v.findViewById(R.id.phone);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.name.setText(ls.get(i).getName());
holder.phone.setText(ls.get(i).getPhone());
//포토 불러오는 코드
final ItemPhoto query = new ItemPhoto(ctx);
query.seq = ls.get(i).seq+"";
String s = ((String)new Main.OjectService() {
@Override
public Object perform() {
return query.execute();
}
}.perform()).toLowerCase();
Log.d("파일명 : ",s);
holder.photo
.setImageDrawable(getResources().getDrawable(
getResources().getIdentifier(
ctx.getPackageName()+":drawable/" +s,null,null),ctx.getTheme()
));
return v;
}
}
static class ViewHolder {
ImageView photo;
TextView name, phone;
}
/* private class PhotoQuery extends Main.QueryFactory {//직접 친 코드
SQLiteOpenHelper helper;
public PhotoQuery(Context ctx) {
super(ctx);
helper = new Main.SqliteHelper(ctx);
}
@Override
public SQLiteDatabase getDatabase() {
return helper.getReadableDatabase();
}
}
private class ItemPhoto extends PhotoQuery {
public ItemPhoto(Context ctx) {
super(ctx);
}
String seq;
public ArrayList<String> execute() {
ArrayList<String> ls = new ArrayList<>();
Cursor c = this.getDatabase().rawQuery(String.format("SELECT %s FROM %s WHERE %s LIKE '%s' ",
DBInfo.MBR_PHOTO,DBInfo.MBR_TABLE,DBInfo.MBR_SEQ,seq),null);
String s ="";
while (c.moveToNext()){
s=c.getString(c.getColumnIndex(DBInfo.MBR_SEQ));
ls.add(s);
}
return ls;
}*/
private class PhotoQuery extends Main.QueryFactory{
Main.SqliteHelper helper;
public PhotoQuery(Context ctx) {
super(ctx);
helper =new Main.SqliteHelper(ctx);
}
@Override
public SQLiteDatabase getDatabase() {
return helper.getReadableDatabase();
}
}
private class ItemPhoto extends PhotoQuery{
String seq;
public ItemPhoto(Context ctx) {
super(ctx);
}
public String execute(){
Cursor c= getDatabase()
.rawQuery(String.format(
" SELECT %s FROM %s WHERE %s LIKE '%s' ",
DBInfo.MBR_PHOTO,
DBInfo.MBR_TABLE,
DBInfo.MBR_SEQ,
seq
),null);
String result = "";
if(c!= null){
if(c.moveToNext()){
result = c.getString(c.getColumnIndex(DBInfo.MBR_PHOTO));
}
}
return result;
}
}
}코딩을 모양 먼저 만들고 진행한다
그림 스케치 하는 것 처럼
쿼리문은 달라붙으니 항상 띄워 준다
package com.example.kgitbank.kakao;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MemberDetail extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.member_detail);
final Context ctx = MemberDetail.this;
//선택한 멤버 정보를 로그로 출력하기
Intent intent = this.getIntent(); /*데이터 수신*/
String seq = intent.getExtras().getString("seq"); /*String형*/
final ItemDetail query = new ItemDetail(ctx);
query.seq = seq;
Memeber m = (Memeber) new Main.OjectService(){
@Override
public Object perform() {
return query.execute();
}
}.perform();
Log.d("선택한 맴버정보 ",m.toString());
new Main.OjectService(){
@Override
public Object perform() {
return null;
}
}.perform();
findViewById(R.id.moveUpdate).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ctx,MemberUpdate.class));
}
});
findViewById(R.id.moveList).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ctx,MemberList.class));
}
});
}//onCreate end (DB만들려면 여기 체크)
/*데이터 베이스 영역 */
private class DetailQuery extends Main.QueryFactory{
Main.SqliteHelper helper;//데이터베이스를 끌고옴
public DetailQuery(Context ctx) {
super(ctx);
helper = new Main.SqliteHelper(ctx);
}
@Override
public SQLiteDatabase getDatabase() {
return helper.getReadableDatabase();
}
}
private class ItemDetail extends DetailQuery{
String seq;
public ItemDetail(Context ctx) {
super(ctx);
}
public Memeber execute(){
Memeber m = new Memeber();
String s = String.format(" SELECT * FROM %s " +
" WHERE %s LIKE '%s' ",
DBInfo.MBR_TABLE, DBInfo.MBR_SEQ, seq
);
Cursor c = this.getDatabase().rawQuery(s,null);
if(c!=null){
if (c.moveToNext()) {
m.setSeq(Integer.parseInt(c.getString(c.getColumnIndex(DBInfo.MBR_SEQ))));
m.setPass(c.getString(c.getColumnIndex(DBInfo.MBR_PASS)));
m.setName(c.getString(c.getColumnIndex(DBInfo.MBR_NAME)));
m.setAddr(c.getString(c.getColumnIndex(DBInfo.MBR_ADDR)));
m.setEmail(c.getString(c.getColumnIndex(DBInfo.MBR_EMAIL)));
m.setPhone(c.getString(c.getColumnIndex(DBInfo.MBR_PHONE)));
m.setPhoto(c.getString(c.getColumnIndex(DBInfo.MBR_PHOTO)));
Log.d("검색된 회원은 ", m.getName());
} else {
Log.d("검색된 회원이 ", "없습니다.");
}
}
return m;
}
}
}멤버 디테일 화면
안드로이드 오픈소스 모음
https://coding-factory.tistory.com/209?category=758272
사진넣으려고 어댑터 패턴을 쓸필요는 없는것같다
리스트 뷰에만 없는 것에 DB 연결해서 쓰는거지
한번 가져온 데이터는 잘 던지고 그냥 이용하는게 맞는 거같다
'Android' 카테고리의 다른 글
람다 표현식에서 참조하는 지역 변수가 꼭 final이어야 하는 이유 (0) 2018.11.26 안드로이드 기기연결 (0) 2018.11.26 and_181121 (0) 2018.11.21 SQLiteDatabase 클래스 (0) 2018.11.21 And_181120 (0) 2018.11.21