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

Activity에서 만든 코드를 fragment에 넣어쓰려하는데 getActivity()를 사용하니 앱이 중단됩니다 [closed]

0 추천

SQlite를 사용한 코드인데 getActivity를 사용한코드를 주석처리하니 작동이잘되나 getActivity()를 사용하니 앱이 꺼지는 현상이있습니다

Tab5.java

package com.example.pc.myapplication;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Tab5 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab5, container, false);


        final DatabaseHelper DatabaseHelper = new DatabaseHelper(getActivity(),

               "DEMO_SQLITE.db", null, 1);
        View v=inflater.inflate(R.layout.tab4,container,false);
        // 테이블에 있는 모든 데이터 출력
        final TextView result = (TextView) v.findViewById(R.id.result);
        final EditText etDate = (EditText) v.findViewById(R.id.date);
        final EditText etItem = (EditText) v.findViewById(R.id.item);
        final EditText etmean = (EditText) v.findViewById(R.id.mean);


        // 날짜는 현재 날짜로 고정
        // 현재 시간 구하기
        long now = System.currentTimeMillis();
        Date date = new Date(now);
        // 출력될 포맷 설정
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy년 MM월 dd일");
        etDate.setText(simpleDateFormat.format(date));

        // DB에 데이터 추가
        Button insert = (Button) v.findViewById(R.id.insert);
        insert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String  date    = etDate.getText().toString();
                String  item    = etItem.getText().toString();
                String  mean   =  etmean.getText().toString();

                //입력값이 누락된게 없는지 확인
                if(date.length() == 0 || item.length() == 0 || mean.length() == 0 ) {
                    Toast.makeText( getActivity(), "모든 데이터를 입력하세요.",
                            Toast.LENGTH_SHORT).show();
                }
                else {
                    //DB 삽입 -> 결과 출력 -> 입력필드 초기화
                    DatabaseHelper.insert(date, item, mean);
                    result.setText(DatabaseHelper.getResult());
                    Toast.makeText(getActivity(), "데이터 생성",

                            Toast.LENGTH_SHORT).show();
                    etItem.setText(null);
                    etmean.setText(null);
                }
            }
        });


        // DB에 있는 데이터 삭제
        Button delete = (Button) v.findViewById(R.id.delete);
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String item = etItem.getText().toString();

                DatabaseHelper.delete(item);
                result.setText(DatabaseHelper.getResult());
                Toast.makeText(getActivity(), "데이터 삭제",

                        Toast.LENGTH_SHORT).show();

            }
        });

        // DB에 있는 데이터 조회
        Button select = (Button) v.findViewById(R.id.select);
        select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                result.setText(DatabaseHelper.getResult());
                Toast.makeText(getActivity(), "데이터 조회",

                        Toast.LENGTH_SHORT).show();

            }
        });
        return rootView;
    }

}

DatabaseHelper.java

 

package com.example.pc.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {

    // DBHelper 생성자로 관리할 DB 이름과 버전 정보를 받음
    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                          int version) {
        super(context, name, factory, version);

    }
//    private int a = 0;

    // DB를 새로 생성할 때 호출되는 함수
    @Override
    public void onCreate(SQLiteDatabase db) {

        // 새로운 테이블 생성
        /* 이름은 DEMO_SQLITE이고, 자동으로 값이 증가하는 _id 정수형 기본키 컬럼과
        item 문자열 컬럼, price 문자열 컬럼, create_at 문자열 컬럼으로 구성된 테이블을 생성. */
        db.execSQL( "CREATE TABLE DEMO_SQLITE (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "item TEXT, price TEXT, create_at TEXT);");
    }

    // DB 업그레이드를 위해 버전이 변경될 때 호출되는 함수
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){}

    public void insert(String create_at, String item, String price) {
        // 읽고 쓰기가 가능하게 DB 열기
        SQLiteDatabase db = getWritableDatabase();

        // DB에 입력한 값으로 행 추가

        ContentValues values = new ContentValues();

       db.execSQL( "INSERT INTO DEMO_SQLITE VALUES(null, '" + item + "', '" + price + "', '" + create_at + "');");

        db.close();
    }


//    public void update(String item, String price) {
//        SQLiteDatabase db = getWritableDatabase();
//        // 입력한 항목과 일치하는 행의 가격 정보 수정
//        db.execSQL("UPDATE DEMO_SQLITE SET price=" + price +
//                " WHERE item='" + item + "';");
//        db.close();
//    }

    public void delete(String item) {
//        SQLiteDatabase db = getWritableDatabase();
        SQLiteDatabase db =getWritableDatabase();
        // 입력한 항목과 일치하는 행 삭제
        db.execSQL("DELETE FROM DEMO_SQLITE WHERE item='" + item + "';");
        db.close();
    }

    public String getResult() {
        // 읽기가 가능하게 DB 열기
        SQLiteDatabase db = getReadableDatabase();
        String result = "";

        // DB에 있는 데이터를 쉽게 처리하기 위해 Cursor를 사용하여 테이블에 있는 모든 데이터 출력
        Cursor cursor = db.rawQuery("SELECT * FROM DEMO_SQLITE", null);
        while (cursor.moveToNext()) {
            result += cursor.getString(0)
                    + " : "
                    + cursor.getString(1)
                    + " / "
                    + cursor.getString(2)
                    + "/ "
                    + cursor.getString(3)
                    + "\n";
        }

        return result;
    }
}



 
원래 getActivity()있던곳이 원래는 getAPPlicationContext()였습니다
질문을 종료한 이유: 죄송합니다 오타가있어서
Soo3142 (190 포인트) 님이 2019년 5월 26일 질문
Soo3142님이 2019년 5월 26일 closed
...