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

아이디 비밀번호를 입력해서 간단한 회원가입 예제를 만들어보고 싶은데요..

0 추천

엄청 간단하게 했는데 회원가입 버튼을 누르면 오류가 생기네요

package com.example.dbdbd;

import java.io.File;


public class MainActivity extends Activity implements OnClickListener {
 public SQLiteDatabase db;
 public Cursor cursor;
 public SimpleCursorAdapter Adapter=null;
 public SimpleCursorAdapter AdapterStomach=null;
 public SimpleCursorAdapter AdapterColon=null;
 public SimpleCursorAdapter AdapterLiver=null;
 public SimpleCursorAdapter AdapterBreast=null;
 public SimpleCursorAdapter AdapterCervix=null;
 public static final String ROOT_DIR = "/data/data/com.example.dbdbd/databases/";
 EditText edit_id, edit_pass ;
 ProductDBHelper mHelper;
 
 public void setDB() {
    File folder = new File(ROOT_DIR);
    if(folder.exists()) {
   
    }
    else {
     folder.mkdirs();
     //Toast.makeText(this, "폴더생성", Toast.LENGTH_LONG).show();
    }

     AssetManager assetManager = getResources().getAssets();
     File outfile = new File(ROOT_DIR+"DBDBD.db"); //--폰에 위치할 경로
   
     InputStream is = null;
      
     FileOutputStream fo = null;
    
     long filesize = 0;
          
          
     try {
      // --asset 폴더 및 복사할 DB 지정
      is = assetManager.open("DBDBD.db", AssetManager.ACCESS_BUFFER); 
       filesize = is.available(); //--사이즈 검증
      
      // 파일이 없거나 패키지 폴더에 설치된 DB파일이 포함된 DB파일 보다 크기가 같지않을 경우 DB파일을 덮어 쓴다.
       if (outfile.length() <= 0) {
       byte[] tempdata = new byte[(int) filesize];
       is.read(tempdata);
       is.close();
       outfile.createNewFile();
       fo = new FileOutputStream(outfile);
       fo.write(tempdata);
       fo.close();   
      }
       else
       {
        //Toast.makeText(this, "db있음", Toast.LENGTH_LONG).show();
      
       }
     } catch (IOException e) {
     Toast.makeText(this, "db이동실패", Toast.LENGTH_LONG).show();
     }  
    }
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
 
     
        Button btn = (Button)findViewById(R.id.button_send);
        btn.setOnClickListener(this);
        Button btn2 = (Button)findViewById(R.id.button_cancel);
        btn2.setOnClickListener(this);
  edit_id = (EditText) findViewById(R.id.edit_id);
  edit_pass = (EditText) findViewById(R.id.edit_id);
    }
    public void onClick(View v) {
     if (v.getId() == R.id.button_send){
      if ((edit_id.getText().toString().equals("")) ||
       (edit_pass.getText().toString().equals(""))) { 
     Toast.makeText(getApplicationContext(), "자료 입력 바람",
       Toast.LENGTH_SHORT).show(); }
   else {
    mHelper.getWritableDatabase();
       ContentValues values = new ContentValues();
       values.put("id", edit_id.getText().toString() );
       values.put("pass", edit_pass.getText().toString() );
       db.insert("member", null, values);
       db.close();
   }
     }
    }
 
}

이게 전체코드구요 

이건 sqlite에 미리 만들어 놓은 테이블이구

05-29 13:42:10.200: E/AndroidRuntime(14482): FATAL EXCEPTION: main
05-29 13:42:10.200: E/AndroidRuntime(14482): java.lang.NullPointerException
05-29 13:42:10.200: E/AndroidRuntime(14482):  at com.example.dbdbd.MainActivity.onClick(MainActivity.java:100)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at android.view.View.performClick(View.java:4084)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at android.view.View$PerformClick.run(View.java:16966)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at android.os.Handler.handleCallback(Handler.java:615)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at android.os.Looper.loop(Looper.java:137)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at android.app.ActivityThread.main(ActivityThread.java:4745)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at java.lang.reflect.Method.invokeNative(Native Method)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at java.lang.reflect.Method.invoke(Method.java:511)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-29 13:42:10.200: E/AndroidRuntime(14482):  at dalvik.system.NativeStart.main(Native Method)
 

이건 오류 메세집니다

요건 xml 화면..

이렇게 간단한 코드도 못짜고 있네요 답답합니다ㅜㅜ 도와주세요~!!

 

 

 

채채 (400 포인트) 님이 2013년 5월 29일 질문
class ProductDBHelper extends SQLiteOpenHelper{

     public ProductDBHelper(Context context) {
      super(context, "DBDBD.db", null, 1);
      // TODO Auto-generated constructor stub
     }

     @Override
     public void onCreate(SQLiteDatabase db) {
      // TODO Auto-generated method stub
      
     }

     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      // TODO Auto-generated method stub
      
     }
      
      }
이건 8천자 이상 못쓴다해서 따로 올립니당..
com.example.dbdbd.MainActivity.onClick(MainActivity.java:100)에서 nullpointer 네요

어떤 코드인가요??
public void onClick(View v) {
     if (v.getId() == R.id.button_send){
      if ((edit_id.getText().toString().equals("")) ||
       (edit_pass.getText().toString().equals(""))) {
     Toast.makeText(getApplicationContext(), "자료 입력 바람",
       Toast.LENGTH_SHORT).show(); }
   else {
    mHelper.getWritableDatabase();
       ContentValues values = new ContentValues();
       values.put("id", edit_id.getText().toString() );
       values.put("pass", edit_pass.getText().toString() );
       db.insert("member", null, values);
       db.close();
   }
위부분 로그 한번찍어보세요 값이 안들어간거 같은데...
로그도 좋은데 디버깅하면 제일 빠릅니다.
매번 답변감사합니다ㅜㅜ 근데 제가 초보라 그부분 로그 찍으라는말씀을 모르겠네여 죄송죄송
실행해서 값을 입력해서 회원가입 버튼을 누르면 이렇게 실행 중지되네여
ContentValues values = new ContentValues();
                values.put("id", edit_id.getText().toString() );
                values.put("pass", edit_pass.getText().toString() );
이부분 말하는거 같네여

1개의 답변

0 추천
 
채택된 답변

Log.e(null, "edit_id.getText().toString() -> "+edit_id.getText().toString());

Log.e(null, "edit_id.getText().toString() -> "+edit_pass.getText().toString());

이런식으로 로그를 찍어보면 로그창에 값이 들어있는지 나옵니다.

  (11,920 포인트) 님이 2013년 5월 29일 답변
채채님이 2013년 5월 31일 채택됨
mHelper.getWritableDatabase();
이부분이 에러가 나네요.
초기화가 안되어 있었습니다.
 mHelper = new ProductDBHelper(this);
초기화를 해주세요 .

전 DB  는 구현안했기 때문에 실행은 안되지만
채채님께서는 SQLiteDatabase을 구현하셨겠죠?
참고로
http://pulsebeat.tistory.com/15 <-DB관련
http://roter.pe.kr/169 <-ProductDBHelper관련
네 sqlite expert 받아서 쓰는데
        mHelper = new ProductDBHelper(this);
했는데도 여전히 안되네요ㅜㅜ 이런
흠....먼저 DB구현부분을 다시 공부하셔야 할꺼 같아요
예제의 주요 기능은 입력받아 DB 에 저장하는 것입니다만.
DB가 제대로 구현이 안된듯합니다.
제가 알려드린 링크 또는 검색하셔서 천천히 공부하시길 권합니다.
검색하시면 친절한 블로그들이 많이 있습니다.
http://rightg.tistory.com/114 여기 참고하셔서 구현해보시길.
님 말한거 생각해보고
        mHelper=new ProductDBHelper(this);
        db=mHelper.getWritableDatabase();
이렇게 했더니 됐네요ㅜㅜ 감사합니다
우선 회원가입 버튼 누르면 한번저장되고 또누르면 오류나네요
일단 들어가는거에 만족
...