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

다른 액티비티에서 정의한 db를 사용하는 법

0 추천
public class mylist extends AppCompatActivity {

    static String mdbName1 = "myassign1";
    static String mtablename1 = "myclass1";
    static SQLiteDatabase mclassDB1 = null;
    static String[] msubject1;
    static String[] mday1;
 
    ArrayList<HashMap<String, String>> mclassList1;
    ListView mlist;
    private static final String mTAG_SUB1 = "msubject1"; //추가용
    private static final String mTAG_DAY1 = "mday1"; //추가용

    Spinner sp;
    ListAdapter madapter;
    Button asgbtn;
  

  HashMap<String, String> cls2 = new HashMap<String, String>();
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mylist);
 
        mlist = (ListView) findViewById(R.id.lstv1);
        mclassList1 = new ArrayList<HashMap<String, String>>();
 
        // 가져온 데이터를 myDB에 넣자
        Intent intent = getIntent();
        String myday = (String) intent.getSerializableExtra("TAG_DAY");
        String mysub = (String) intent.getSerializableExtra("TAG_SUB");
 

        if (myday == null) {
         } else {
            List<String> Getday = new ArrayList<String>();
            Getday.add(myday);
            List<String> Getsub = new ArrayList<String>();
            Getsub.add(mysub);
 
            mday1 = new String[Getday.size()];        
            Getday.toArray(mday1);
            msubject1 = new String[Getsub.size()];
            Getsub.toArray(msubject1);  
 
            if (myday != null)
     Toast.makeText(getApplicationContext(), "선택 강의:\n수업시간 :  " + myday + " \n과목명: " + mysub, Toast.LENGTH_LONG).show();
        }

        //msubject[]는 과목명이 들어가있고
        //mday[] 는 시간이 들어가있음
 
// 값 저장하기
        try {
            mclassDB1 = this.openOrCreateDatabase(mdbName1, MODE_PRIVATE, null);

            mclassDB1.execSQL("CREATE TABLE IF NOT EXISTS " + mtablename1
                    + " (msubject1 VARCHAR(20), mday1 VARCHAR(20) );");
 
            //mclassDB1.execSQL("DELETE FROM " + mtablename1  ); 초기화
 
            //새로운 데이터를 테이블에 집어넣습니다..
            if (myday != null) { //null값으로 항목에 추가하는 것을 막기위함
                for (int i = 0; i < msubject1.length; i++) {
                    mclassDB1.execSQL("INSERT INTO " + mtablename1
                            + " (msubject1, mday1)  Values ('" + msubject1[i] + "', '" + mday1[i] + "');");
                }

            }
            mclassDB1.close();

        } catch (SQLiteException se) {

            Toast.makeText(getApplicationContext(), se.getMessage(), Toast.LENGTH_LONG).show();
            Log.e("", se.getMessage());
        }

        showList();
 
        asgbtn = (Button) findViewById(R.id.asgbtn);
        asgbtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                // 관리 페이지로 이동하자
                Intent outintent = new Intent(getApplicationContext(), AssignMng.class);
                startActivity(outintent);
            }
        });
    }

    protected void showList() {

        try {
           SQLiteDatabase ReadDB = this.openOrCreateDatabase(mdbName1, MODE_PRIVATE, null);

           Cursor c = ReadDB.rawQuery("SELECT * FROM " + mtablename1, null);

            /**○  이 부분이 없으면 vmylistv에 정보를 그려넣을 수 없음*/
            if (c != null)
               if (c.moveToFirst()) {
                    do {//테이블에서 가져옴
 

                        String SUBJECT = c.getString(c.getColumnIndex("msubject1"));
                        String DAY = c.getString(c.getColumnIndex("mday1"));
 
                        HashMap<String, String> cls1 = new HashMap<String, String>();
                        cls1.put(mTAG_SUB1, SUBJECT);
                        cls1.put(mTAG_DAY1, DAY);

                        //어레이리스트에 추가
                        mclassList1.add(cls1);
                    } while (c.moveToNext());
                }
            /**○  여기까지*/
 
            ReadDB.close();
            madapter = new SimpleAdapter(this, mclassList1, R.layout.vmylistv, new String[]{mTAG_SUB1, mTAG_DAY1}, new int[]{R.id.mtv1, R.id.mtv2});

            mlist.setAdapter(madapter);
 

        } catch (SQLiteException se) {
            Toast.makeText(getApplicationContext(), se.getMessage(), Toast.LENGTH_LONG).show();
            Log.e("", se.getMessage());
        }
    }
}

 

====================해당 코드의 동작=============
a라는 액티비티가 있습니다
 

a에서 이벤트를 통해 intent로 2가지 data를 받고(hashmap) 받은 데이터를 동일하게 이 액티비티에서
 

사용하기때문에 문자열과 어레이리스트를 오가는 반복후에 변수에 저장, show()를 통한 출력 입니다.
(줄여썻습니다. 딱히 필요할지 몰라서)

해당 액티비티의 db의 테이블에 저장되었습니다.
=============================================

질문하고자 하는 것은
 
 위에서 받은 정보들을 mclassDB1의 mtablename1에 집어 넣었지 않습니까?
 
여기서 받은 데이터들을 (위 db의 테이블에 저장되있는 것) 다른 액티비티(C라고하겠습니다)

에서 사용하고싶습니다.

C액티비티의 스피너 아이템으로 나오게 어댑터를 연결하고 싶은데, 제가 예제만 보고 따라가는 거라

이해도가 좀 낮아서 어떻게 해야할지 여쭙습니다.

타 예제들과 달리 DBHelper도 사용되지 않아 따라할만한 예제가 없습니다

 

이 코딩에서는 어떻게 해결해야할까요? 도움부탁드립니다
도해이 (270 포인트) 님이 2017년 6월 19일 질문
똑같은 이름으로 c액티비티에서 SQlitedatabase 선언하고 테이블이름 갖게하고
해봤는데 오류가나서 이 방법은 아닌듯한데 한참 고민해봐도 답이없어 여쭙습니다

1개의 답변

+1 추천
 
채택된 답변

DB를 다시 읽을때는 다음 처럼 Cursor를 사용하시면 됩니다.

 

SQLiteDatabase mclassDB1 = this.openOrCreateDatabase("myassign1", MODE_PRIVATE, null);
Cursor cursor = mclassDB1.rawQuery("SELECT * FROM myassign1", null);

ArrayList<String> msubject1List = new ArrayList<>();
ArrayList<String> mday1List     = new ArrayList<>();

if (cursor != null) {
    if (cursor.moveToFirst()) {
        do {
            msubject1List.add(cursor.getString(cursor.getColumnIndex("msubject1")));
            mday1List.add(cursor.getString(cursor.getColumnIndex("mday1List")));
        } while (cursor.moveToNext());
    }
    cursor.close();
}
디자이너정 (42,810 포인트) 님이 2017년 6월 19일 답변
도해이님이 2017년 6월 20일 채택됨
관심 감사드립니다
해결했어요 !
...