MainActivity.java

 

NetworkStatus.java

 

activity_mai.xml

 

인터넷 연결 상태를 확인하기 위하여 NetworkStatus클래스를 하나 정의 해주자 그리고 아래와 같이 

 

ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE) ;

NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if(networkInfo != null)
{
int type = networkInfo.getType();
if(type == ConnectivityManager.TYPE_MOBILE)
{
return TYPE_MOBILE ;
}else if(type == ConnectivityManager.TYPE_WIFI) {
return TYPE_WIFI;
}
}

return TYPE_NOT_CONNECTED;

 

시스템서비스를 통해 매니저를 얻고 그 매저를 통해 네트워크 정보를 얻고 네트워크 정보에서 어떤 타입으로 연결되어 있는지 확인하여 지금 현재 핸드폰의 인터넷 연결 유형 또는 미연결 상태를 알아내는 함수를 만들어내주면 끝난다.

(매니페스트에 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 권한 추가필요)

 

 

결과화면

 

MainActivity

 

activity_main.xml

 

데이터베이스를 이용한 어플리케이션에서 만약 어플리케이션이 배포가 완료되고 다시 테이블의 칼럼이나 구성을 바꿔야할 상황일 때 이 헬퍼를 이용하면 편리하다. 우선 아래처럼

 

class DatabaseHelper extends SQLiteOpenHelper {

public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

println("onCreate() 호출됨");

String tableName = "customer";

String sql = "create table if not exists " + tableName + "(_id integer PRIMARY KEY autoincrement , name text, age integer, mobile text) ";
sqLiteDatabase.execSQL(sql);

println("테이블 생성됨.");

}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

println("onUpgrade() 호출됨" + i + ", " + i1) ;

if(i1 > 1)
{
String tableName = "customer" ;
sqLiteDatabase.execSQL("drop table if exists " + tableName);
}
}
}

SQLiteOpenHelper를 상속받은 클래스를 하나 정의 해주고 public void onCreate,  onUpgrade를 오버라이드 해주면 준비는 끝난다. 이 후 데이터베이스를 열 때 

 

DatabaseHelper helper = new DatabaseHelper(this, databaseName, null, 3 );
database = helper.getWritableDatabase();

 

이런 식으로 getWritableDatabase를 이용하여 열어 주면 된다. 이 때 데이터 베이스가 처음 생성되는 경우라면 onCreate가 실행되고 또는 데이터베이스가 버전이 업그레이드 되어 열리면 onUpgrade가 실행된다.(둘 다 아닐 경우 아무것도 실행안됨 그 이후에 onOpen() 무조건 실행됨) 이 두 메서드를 잘오버라이드 시켜 버전관리를 해주면 된다. 

 

 

 

결과화면

 

MainActivity

...더보기
  
package com.example.boostcoursepractice;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;

import android.util.Log;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import java.net.URL;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    EditText editText ;
    EditText editText2 ;
    EditText editText3 ;
    EditText editText4 ;
    EditText editText5  ;
    TextView textView;
    SQLiteDatabase database ;

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

        editText = (EditText) findViewById(R.id.editText);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText3 = (EditText) findViewById(R.id.editText3);
        editText4 = (EditText) findViewById(R.id.editText4);
        editText5 = (EditText) findViewById(R.id.editText5);

        textView = (TextView) findViewById(R.id.textView);

        Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String databaseName = editText.getText().toString();
                openDatabase(databaseName);
            }
        });

        Button button2 = (Button) findViewById(R.id.button2);

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String tableName = editText2.getText().toString();
                createTable(tableName);
            }
        });

        Button button3 = (Button) findViewById(R.id.button3);

        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = editText3.getText().toString().trim();
                String ageStr = editText4.getText().toString().trim();
                String mobile = editText5.getText().toString().trim();

                int age = -1 ;
                try{
                    age = Integer.parseInt(ageStr);
                }catch (Exception e) {
                    e.printStackTrace();
                }

                insertData(name, age, mobile);

            }
        });

        Button button4 = (Button) findViewById(R.id.button4);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String tableName = editText2.getText().toString();
                selectData(tableName);
            }
        });
    }

    public void openDatabase(String databaseName)
    {
        println("openDatabase() 호출됨");
        database = openOrCreateDatabase(databaseName, MODE_PRIVATE, null);

        if(database != null)
        {
            println("데이터 베이스 오픈됨");
        }

    }

    public void createTable(String tableName)
    {
        println("crateTable() 호출됨");

        if(database !=null)
        {
            String sql = "create table " + tableName + "(_id integer PRIMARY KEY autoincrement , name text, age integer, mobile text) ";
            database.execSQL(sql);

            println("테이블 생성됨.");
        }else{
            println("먼저 데이터베이스를 오픈하세요");
        }
    }

    public void insertData(String name, int age, String mobile)
    {
        println("insertData() 호출됨");

        if(database != null)
        {
            String sql = "insert into customer(name, age, mobile) values(?,?,?)";
            Object[] params = {name, age, mobile};

            database.execSQL(sql, params);
            println("데이터 추가됨");
        }else{
            println("먼저 데이터베이스를 오픈하세요.");
        }
    }

    public void selectData(String tableName)
    {
        println("selectData() 호출됨");

        if(database != null)
        {
            String sql = "select name, age, mobile from " + tableName ;
            Cursor cursor = database.rawQuery(sql, null);
            println("조회된 데이터 개수 : " + cursor.getCount());

            for(int i=0 ; i<cursor.getCount() ; i++)
            {
                cursor.moveToNext();
                String name = cursor.getString(0);
                int age = cursor.getInt(1);
                String mobile = cursor.getString(2) ;

                println("#" + i + "->" + name + ", " + age + ", " + mobile);
            }

            cursor.close();
        }
    }


    public void println(String s)
    {
        textView.append(s+"\n");
    }

}
  

 

activity_mail.xml

 

우선 데이터 베이스를 구성하고 관리하는데는 4가지 단계가 있다. 데이터베이스를 1.오픈하고 2.테이블을 만들고 데이터를 3.추가하고 4.조회하고 일단 오픈 하는 코드는 

 

SQLiteDatabase database = openOrCreateDatabase(databaseName, MODE_PRIVATE, null);

 

위와 같고 테이블을 만들고 데이터를 추가할 때는 아래와 같이

 

String sql = "create table " + tableName + "(_id integer PRIMARY KEY autoincrement , name text, age integer, mobile text) ";
database.execSQL(sql); 

 

String sql = "insert into customer(name, age, mobile) values(?,?,?)";
Object[] params = {name, age, mobile};

database.execSQL(sql, params);

 

SQLiteDatabase의 execSQL()의 매개변수로 sql문을 넘겨 실행시킨다.

 

마지막으로 조회는 

 

String sql = "select name, age, mobile from " + tableName ;
Cursor cursor = database.rawQuery(sql, null);
println("조회된 데이터 개수 : " + cursor.getCount());

for(int i=0 ; i<cursor.getCount() ; i++)
{
cursor.moveToNext();
String name = cursor.getString(0);
int age = cursor.getInt(1);
String mobile = cursor.getString(2) ;

println("#" + i + "->" + name + ", " + age + ", " + mobile);
}

cursor.close();

 

위와 같이 SQLiteDatabase의 rawQuery()를 이용하여 리턴 값으로 Cursor를 받고 커서의 getCount()로 레코드의 개수를 파악하고 cursor.moveToNext()로 다음 레코드로 넘어가고 cursor.getString(0), cursor.getInt(1) 같은 것들로 현재 레코드의 얻고자하는 컬럼 번호를 지정하여 데이터를 가져와야 한다.

 

 

 

 

결과화면

+ Recent posts