简体   繁体   English

将JSON数据存储到SQLite时出错

[英]Getting error while storing json data into SQLite

i am creating a registration form and getting error while storing data into SQLite . 我正在创建注册表,并且在将数据存储到SQLite出错。 My data is inserting in MYSql but not in SQLite .In the below code as you can see in doinbackground function data is going to MYSql database but after that it generates error and data is not inserting in SQLite Here is my Registration code below. 我的数据插入到MYSql但没有插入SQLite 。在下面的代码中,如您在doinbackground函数中看到的,数据将进入MYSql数据库,但之后它生成错误并且数据没有插入SQLite这是下面的我的注册代码。

 public class Register_Activity extends Activity {


/*
RadioGroup rg;
RadioButton rb;
   int id;*/

private RadioGroup radioSexGroup;
private RadioButton radioSexButton;



private ProgressDialog pDialog;


   TextView Fname,Lname,Address,Password,Phone,Email,Gender;
   String password,gender;
    Button bnt_Submit;
    EditText edt_email,edt_password,edt_fname,edt_phone,edt_address,edt_lastName;
    JSONObject json;


    JSONParser jsonParser = new JSONParser();



    //http://www.truzzinfotech.co.nz/admin/public/jsonregister
    private static final String KEY_SUCCESS = "success";


    //private static final String KEY_ID = "id";
    private static final String KEY_FIRSTNAME = "firstname";
    private static final String KEY_LASTNAME = "lastname";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_PHONE = "phone";
    //private static final String KEY_UID = "uid";
    private static final String KEY_PASSWORD = "password";
    private static final String KEY_ADDRESS = "address";
    private static final String KEY_GENDER = "gender";
    //private static final String KEY_CREATED_AT = "created_at";



   @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);




    radioSexGroup = (RadioGroup) findViewById(R.id.radioSex);

    bnt_Submit =(Button)findViewById(R.id.btnsubmit);
    edt_email = (EditText)findViewById(R.id.Edt_Email);
    edt_password = (EditText)findViewById(R.id.Edt_Password);
    edt_lastName = (EditText)findViewById(R.id.Edt_LastName);
    edt_fname  = (EditText)findViewById(R.id.Edt_Name);
    edt_phone = (EditText)findViewById(R.id.Edt_Phone);
    edt_address = (EditText)findViewById(R.id.Edt_Address);


    Fname  = (TextView)findViewById(R.id.fnameError);
    Lname  = (TextView)findViewById(R.id.lnameError);
    Email  = (TextView)findViewById(R.id.emailError);
     Phone  = (TextView)findViewById(R.id.phnError);
     Password  = (TextView)findViewById(R.id.passError);
     Address  = (TextView)findViewById(R.id.addError);
     Gender  = (TextView)findViewById(R.id.genderError);

    bnt_Submit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {


            int selectedId = radioSexGroup.getCheckedRadioButtonId();

            // find the radiobutton by returned id
            radioSexButton = (RadioButton) findViewById(selectedId);

            //Toast.makeText(getApplicationContext(),radioSexButton.getText(), Toast.LENGTH_SHORT).show();

            new RegisterUser().execute();

        }
    });
}
class RegisterUser extends AsyncTask<String, String, String> {



    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        pDialog = new ProgressDialog(Register_Activity.this);
        pDialog.setMessage("Registering...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... params) {

// TODO Auto-generated method stub


         String firstname =edt_fname.getText().toString();
         String email =edt_email.getText().toString();
         String phone =edt_phone.getText().toString();
         String address =edt_address.getText().toString();
         String lastname =edt_lastName.getText().toString();
                password =edt_password.getText().toString();
                gender= radioSexButton.getText().toString();
                UserFunctions userFunction = new UserFunctions();
                JSONObject json = userFunction.registerUser(firstname, lastname, password, email, phone, address, gender);

                Log.d("json ch aa gya", json.toString());



    // Log.d("param",params1.toString());


     try {
         Log.d("try ch aa gya", "try ch aa gya");
         if (json.getString(KEY_SUCCESS) != null) {
                String res = json.getString(KEY_SUCCESS); 
                if(Integer.parseInt(res) == 1){
                DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                JSONObject json_user = json.getJSONObject("detail");
                Log.d("json_users ch aa gya", json_user.toString());

                // Clear all previous data in database
                userFunction.logoutUser(getApplicationContext());


                db.addUser(json_user.getString(KEY_FIRSTNAME), json_user.getString(KEY_LASTNAME), json.getString(KEY_EMAIL), json_user.getString(KEY_PHONE), json_user.getString(KEY_ADDRESS), json_user.getString(KEY_GENDER), json_user.getString(KEY_PASSWORD));                     
                Log.d("db.adduser ch aa gya", db.toString());

                finish();

            } else {


            }
     }}catch (Exception e) {
                // TODO: handle exception
            }




    return null;
     }

            protected void onPostExecute(String file_url) {
        // dismiss the dialog once done
                pDialog.dismiss();


                             try {
                            JSONObject c = json.getJSONObject("detail");
                            //   phone,email,pass,add,fnam,lnam,gen
                            JSONArray   phone = c.optJSONArray("phone");
                            JSONArray   email = c.optJSONArray("email");
                            JSONArray   pass = c.optJSONArray("password");
                            JSONArray   add = c.optJSONArray("address");
                            JSONArray   fnam = c.optJSONArray("firstname");
                            JSONArray   lnam = c.optJSONArray("lastname");
                            //JSONArray gen = c.optJSONArray("gender");


                            Log.v("Error", c.toString());       

                    if(fnam != null || edt_fname == null) {
                        Fname.setText(fnam.getString(0));
                        }
                    else{
                        Fname.setText("");
                    }
                    if(lnam != null || edt_lastName == null) {
                        Lname.setText(lnam.getString(0));
                        }
                    else{
                        Lname.setText("");
                    }
                    if(email != null || edt_email == null){
                        Email.setText(email.getString(0));
                        }
                    else{
                        Email.setText("");
                    }
                    if(phone != null || edt_phone == null){
                        Phone.setText(phone.getString(0));
                        }
                    else{
                        Phone.setText("");
                    }
                    if(pass != null || edt_password == null){
                        Password.setText(pass.getString(0));
                    }
                    else{
                        Password.setText("");
                    }
                    if(add != null || edt_address == null){
                        Address.setText(add.getString(0));
                    }
                    else{
                        Address.setText("");
                    }





                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }




        }




    }

} }

this is my SQlite code below 这是我的下面的SQlite代码

public class DatabaseHandler extends SQLiteOpenHelper { 公共类DatabaseHandler扩展了SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "restaurant_customer";

// Login table name
private static final String TABLE_LOGIN = "login";


// Login Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_FIRSTNAME = "firstname";
private static final String KEY_LASTNAME = "lastname";
private static final String KEY_EMAIL = "emails";
private static final String KEY_PHONE = "phone";
//private static final String KEY_UID = "uid";
private static final String KEY_PASSWORD = "password";
private static final String KEY_ADDRESS = "address";
private static final String KEY_GENDER = "gender";

//private static final String KEY_CREATED_AT = "created_at";

public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_LOGIN_TABLE = "CREATE TABLE " + TABLE_LOGIN + "("
            + KEY_ID + " INTEGER PRIMARY KEY," 
            + KEY_FIRSTNAME + " TEXT,"
            + KEY_LASTNAME + " TEXT,"
            + KEY_PASSWORD + " TEXT,"
            + KEY_EMAIL + " TEXT UNIQUE,"
            + KEY_PHONE + " INTEGER,"
            + KEY_ADDRESS + " TEXT,"
            + KEY_GENDER + " TEXT," + ")";
    db.execSQL(CREATE_LOGIN_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGIN);

    // Create tables again
    onCreate(db);
}

/**
 * Storing user details in database
 * */
public void addUser(String firstname, String lastname, String password, String emails, String phone, String address, String gender, String uid, String created_at) {

    Log.d("param","add user ch aa gya");
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_FIRSTNAME, firstname); // FIRST Name
    values.put(KEY_LASTNAME, lastname); 
    values.put(KEY_EMAIL, emails); // Email
    //values.put(KEY_UID, uid); // Uid
    values.put(KEY_PHONE, phone); // Phone
    values.put(KEY_ADDRESS, address); // Address
    values.put(KEY_GENDER, gender); // Gender
    values.put(KEY_PASSWORD, password); // Password
    Log.d("values",values.toString());
    //values.put(KEY_CREATED_AT, created_at); // Created At

    // Inserting Row
    db.insert(TABLE_LOGIN, null, values);
    db.close(); // Closing database connection
}

/**
 * Getting user data from database
 * */
public HashMap<String, String> getUserDetails(){
    HashMap<String,String> user = new HashMap<String,String>();
    String selectQuery = "SELECT  * FROM " + TABLE_LOGIN;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // Move to first row
    cursor.moveToFirst();
    if(cursor.getCount() > 0){
        user.put("firstname", cursor.getString(1));
        user.put("lastname", cursor.getString(2));
        user.put("email", cursor.getString(3));
        //user.put("uid", cursor.getString(4));
        //user.put("created_at", cursor.getString(5));
        user.put("phone", cursor.getString(6));
        user.put("password", cursor.getString(7));
        user.put("address", cursor.getString(8));
        user.put("gender", cursor.getString(9));
        //user.put("phone", cursor.getString(10));
        Log.d("user",user.toString());
    }
    cursor.close();
    db.close();
    // return user
    return user;
}

/**
 * Getting user login status
 * return true if rows are there in table
 * */
public int getRowCount() {
    String countQuery = "SELECT  * FROM " + TABLE_LOGIN;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int rowCount = cursor.getCount();
    db.close();
    cursor.close();

    // return row count
    return rowCount;
}

/**
 * Re crate database
 * Delete all tables and create them again
 * */
public void resetTables(){
    SQLiteDatabase db = this.getWritableDatabase();
    // Delete All Rows
    db.delete(TABLE_LOGIN, null, null);
    db.close();
}

public void addUser(String string, String string2, String string3,
        String string4, String string5, String string6, String string7) {
    // TODO Auto-generated method stub

}

}

Logcat error Logcat错误

12-26 13:05:00.386: D/dalvikvm(671): GC_FOR_ALLOC freed 104K, 4% free 11838K/12231K, paused 46ms, 

total 67ms
12-26 13:05:00.396: I/dalvikvm-heap(671): Grow heap (frag case) to 11.857MB for 279056-byte allocation
12-26 13:05:00.516: D/dalvikvm(671): GC_FOR_ALLOC freed 7K, 4% free 12103K/12551K, paused 104ms, total 104ms
12-26 13:05:00.686: D/jayant(671): jayant
12-26 13:05:00.686: D/param(671): [firstname=tom, lastname=johnson, password=tomcatvideo, email=tom@gmail.com, phone=987654321, address=demo, gender=Male]
12-26 13:05:03.437: I/Choreographer(671): Skipped 44 frames!  The application may be doing too much work on its main thread.
12-26 13:05:06.406: E/JSON(671): {"detail":{"firstname":"tom","lastname":"johnson","gender":"Male","phone":"987654321","address":"demo"},"success":1}
12-26 13:05:06.646: D/getJSONFromUrl(671): {"success":1,"detail":{"gender":"Male","lastname":"johnson","phone":"987654321","firstname":"tom","address":"demo"}}
12-26 13:05:06.836: D/json ch aa gya(671): {"success":1,"detail":{"gender":"Male","lastname":"johnson","phone":"987654321","firstname":"tom","address":"demo"}}
12-26 13:05:06.836: D/try ch aa gya(671): try ch aa gya
12-26 13:05:06.985: D/json_users ch aa gya(671): {"gender":"Male","lastname":"johnson","phone":"987654321","firstname":"tom","address":"demo"}
12-26 13:05:08.096: D/AndroidRuntime(671): Shutting down VM
12-26 13:05:08.096: W/dalvikvm(671): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
12-26 13:05:08.275: E/AndroidRuntime(671): FATAL EXCEPTION: main
12-26 13:05:08.275: E/AndroidRuntime(671): java.lang.NullPointerException
12-26 13:05:08.275: E/AndroidRuntime(671):  at app.restaurant.Register_Activity$RegisterUser.onPostExecute(Register_Activity.java:209)
12-26 13:05:08.275: E/AndroidRuntime(671):  at app.restaurant.Register_Activity$RegisterUser.onPostExecute(Register_Activity.java:1)
12-26 13:05:08.275: E/AndroidRuntime(671):  at android.os.AsyncTask.finish(AsyncTask.java:631)
12-26 13:05:08.275: E/AndroidRuntime(671):  at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-26 13:05:08.275: E/AndroidRuntime(671):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
12-26 13:05:08.275: E/AndroidRuntime(671):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 13:05:08.275: E/AndroidRuntime(671):  at android.os.Looper.loop(Looper.java:137)
12-26 13:05:08.275: E/AndroidRuntime(671):  at android.app.ActivityThread.main(ActivityThread.java:4745)
12-26 13:05:08.275: E/AndroidRuntime(671):  at java.lang.reflect.Method.invokeNative(Native Method)
12-26 13:05:08.275: E/AndroidRuntime(671):  at java.lang.reflect.Method.invoke(Method.java:511)
12-26 13:05:08.275: E/AndroidRuntime(671):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-26 13:05:08.275: E/AndroidRuntime(671):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-26 13:05:08.275: E/AndroidRuntime(671):  at dalvik.system.NativeStart.main(Native Method)

私有静态最终字符串DATABASE_NAME =“ restaurant.db”;

Your json variable in onPostExecute() is null. 您在onPostExecute() json变量为null。 There's a local variable by that name in doInBackground() that you assign to, and there's anothre class-level variable by that name in Register_Activity you never assign to. 您在doInBackground()中有一个该名称的局部变量,而您从未分配过的Register_Activity该名称的其他类级变量。

Generally, NPEs like this are relatively easy to figure out, for example when single-stepping in debugger. 通常,这样的NPE相对容易找出,例如在调试器中单步执行时。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM