// EditText에 이름을 입력받아 SQlite에 저장 후, 그 저장된 이름들을 전부 출력시키는 프로그램입니다.
근데, 입력버튼과 랭킹조회 버튼을 누르면 "앱이 종료되었습니다."라는 문구가 뜨면서 종료됩니다.
뭐가 문제일까요?? (manifest.xml에 OpenDBAdapter도 추가해줬습니다.)
● MainActivity 입니다.
import com.example.ex_text.OpenDBAdapter.DBHelper;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
EditText edtName;
Button btnIn, btnRank;
TextView tvRank;
static String name;
Context context;
OpenDBAdapter dbAdapter;
DBHelper helper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtName = (EditText)findViewById(R.id.EdtName);
btnIn = (Button)findViewById(R.id.BtnIn);
btnRank = (Button)findViewById(R.id.BtnRank);
tvRank = (TextView)findViewById(R.id.TvRank);
btnIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
name = edtName.getText().toString();
dbAdapter = new OpenDBAdapter(context);
helper = new DBHelper(context);
dbAdapter.inData();
Toast.makeText(getApplicationContext(), "입력됨", 0);
}
});
btnRank.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String ranking;
ranking = dbAdapter.selData();
tvRank.setText(ranking);
}
});
}
}
============================================================
● OpenDBAdapter 클래스입니다.
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class OpenDBAdapter {
public static final String DB_NAME = "pipe";
public static final int DB_VER = 1;
public static final String tableName = "PipeTBL";
public DBHelper dbhelper;
public static SQLiteDatabase db;
Context context;
static String name;
public static final String CREATE_PIPE = "create table " + tableName + "(id Integer primary key autoincrement, "
+"name text);";
public static final String DROP = "drop table";
public OpenDBAdapter(Context context) {
// TODO Auto-generated constructor stub
this.context = context;
}
static class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VER);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(CREATE_PIPE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
public void inData() {
db = dbhelper.getWritableDatabase();
name = MainActivity.name;
db.execSQL("Insert into "+tableName+"(name)Values(" + name + ")");
db.close();
}
public String selData() {
db = dbhelper.getReadableDatabase();
name = MainActivity.name;
Cursor cursor = db.rawQuery("Select * from " + tableName, null);
String ranking = "랭킹순위" + "\r\n" + "________" + "\r\n";
while(cursor.moveToNext()){
ranking += cursor.getString(0) + " ";
}
cursor.close();
db.close();
return ranking;
}
}
=================================================
● 이건 LogCat에 빨간 글씨로 표시되어있는 부분입니다. 무슨문제이고, 어떻게해야 해결하는지좀
알려주세요. (제가 급해서 최대한 빠르게 부탁드립니다.)
FATAL EXCEPTION: main
Process: com.example.ex_text, PID: 19944
java.lang.NullPointerException: Attempt to invoke virtual method
'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)' on a null object reference
at com.example.ex_text.OpenDBAdapter$DBHelper.onCreate(OpenDBAdapter.java:39)
at com.example.ex_text.MainActivity$1.onClick(MainActivity.java:44)
at android.view.View.performClick(View.java:5217)
at android.view.View$PerformClick.run(View.java:20983)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6117)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)