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

안드로이드(Eclipse) SQlite

0 추천
// 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)
dmstjr1070 (140 포인트) 님이 2015년 11월 13일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...