2015-11-18 3 views
1

Я новичок в SharedPreferences и SQLite.Ошибка ввода значений в SQLite с SharedPreferences

Я реализовал SharedPreferences, ссылаясь на онлайн-пример.

Когда я отлаживал профиль ожидания (я получал значение по умолчанию для профиля), все остальные значения были правильными, когда я вставил с моего устройства.
Но когда я нажимаю кнопку, это вызывает некоторые ошибки.

Я googled, но не получил никакого ответа, как ожидалось.
Пожалуйста, помогите мне понять, где я делаю ошибку.

DBHandler класс

package com.example.app; 

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.sql.Blob; 
import java.sql.SQLData; 

import android.R.raw; 
import android.app.Activity; 
import android.app.Application; 
import android.content.ContentValues; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.CompressFormat; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.preference.PreferenceManager.OnActivityResultListener; 
import android.text.StaticLayout; 
import android.util.Log; 
import android.widget.Toast; 

public class DBHandler extends SQLiteOpenHelper{ 


    public static int VERSION_NAME=1; 
    public static String DATABASE_NAME="altaf"; 
    public static String TABLE_REGISTER="register"; 
    public static String PERSON_ID="_PersonId"; 
    public static String PERSON_FNAME="FirstName"; 
    public static String PERSON_EMAIL="EmaiId"; 
    public static String PERSON_PASSWORD="Password"; 
    public static String PERSON_PHOTO="Photo"; 
    public static String PERSON_GENDER="Gender"; 
    public static String PERSON_COUNTRY="Country"; 
    public static String PERSON_STATE="State"; 
    public static String PERSON_CITY="City"; 
    public static String PERSON_S_QUE="Squestion"; 
    public static String PERSON_DOB="dob"; 
    public static String PERSON_UNAME="Uname"; 



    Context context; 

    public DBHandler(Context context) { 
     super(context, DATABASE_NAME, null, VERSION_NAME); 
     // TODO Auto-generated constructor stub 


    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     try{ 
     String create_table="CREATE TABLE " + TABLE_REGISTER + "(" + PERSON_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + PERSON_FNAME + " TEXT NOT NULL," + PERSON_EMAIL + " TEXT NOT NULL," + PERSON_PASSWORD + " TEXT NOT NULL," + PERSON_PHOTO + " blob not null," + PERSON_GENDER + " TEXT NOT NULL," + PERSON_COUNTRY + " TEXT NOT NULL," + PERSON_STATE + " TEXT NOT NULL," + PERSON_CITY + " TEXT NOT NULL," + PERSON_S_QUE + " TEXT NOT NULL," + PERSON_DOB + " DATE," + PERSON_UNAME + " TEXT NOT NULL)"; 
     db.execSQL(create_table); 
     } 
     catch(Exception e) 
     { 
      Log.e("failed to create table", e.toString()); 

     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS"+TABLE_REGISTER); 
     onCreate(db); 
    } 


    public void insert(String fname,String email,String pwd,String profile,String gender,String country,String state,String city,String sec_que,String dob,String uname) throws SQLException{ 

     SQLiteDatabase db=this.getWritableDatabase(); 
     ContentValues cv=new ContentValues(); 
     cv.put(PERSON_FNAME, fname); 
     cv.put(PERSON_EMAIL, email); 
     cv.put(PERSON_PASSWORD, pwd); 
     cv.put(PERSON_PHOTO, profile); 
     cv.put(PERSON_GENDER, gender); 
     cv.put(PERSON_COUNTRY, country); 
     cv.put(PERSON_STATE, state); 
     cv.put(PERSON_CITY, city); 
     cv.put(PERSON_COUNTRY, sec_que); 
     cv.put(PERSON_STATE, dob); 
     cv.put(PERSON_CITY, uname); 
     db.insert(TABLE_REGISTER, null, cv); 

     db.close();} 

mainActivity класс

package com.example.app; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.nio.channels.FileChannel; 
import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.content.pm.PackageManager; 
import android.content.pm.ResolveInfo; 
import android.database.sqlite.SQLiteDatabase; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.Parcelable; 
import android.provider.MediaStore; 
import android.text.method.HideReturnsTransformationMethod; 
import android.text.method.PasswordTransformationMethod; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    EditText e_fname,e_pwd,e_email; 
    Button b_register; 
    final int one=1; 
    public static String msg="success"; 
    public static String error="unsuccess"; 

    CheckBox c_agree,c_spwd; 
    TextView t_tc; 




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

     e_fname=(EditText)findViewById(R.id.r_e_fnm); 
     e_pwd=(EditText)findViewById(R.id.r_e_pwd); 
     e_email=(EditText)findViewById(R.id.r_e_email); 
     b_register=(Button)findViewById(R.id.b_register); 
     c_agree=(CheckBox)findViewById(R.id.r_ch_agree); 
     c_spwd=(CheckBox)findViewById(R.id.r_ch_spwd); 
     t_tc=(TextView)findViewById(R.id.r_t_tc); 

     final DBHandler handler=new DBHandler(this); 
     SQLiteDatabase db=handler.getWritableDatabase(); 
     SharedPreferences pref=getApplicationContext().getSharedPreferences("pref", MODE_PRIVATE); 
     final Editor editor=pref.edit(); 



     c_spwd.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 
       if(!isChecked) 
       { 
        e_pwd.setTransformationMethod(PasswordTransformationMethod.getInstance()); 
       }else 
       { 
        e_pwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); 
       } 
      } 
     }); 


     b_register.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       String fname,pwd,email; 
       fname=e_fname.getText().toString(); 
       email=e_email.getText().toString(); 
       pwd=e_pwd.getText().toString(); 

       if(fname.equals("")|| email.equals("")||pwd.equals("")) 
       { 
        e_fname.setError("field is required"); 
        e_pwd.setError("field is required"); 
        e_email.setError("field is required"); 
       } 
       else 
       { 
        String PERSON_FNAME="FirstName"; 
        String PERSON_EMAIL="EmaiId"; 
        String PERSON_PASSWORD="Password"; 



        editor.putString(PERSON_FNAME, fname); 
        editor.putString(PERSON_EMAIL, email); 
        editor.putString(PERSON_PASSWORD, pwd); 
        editor.apply(); 

       Toast.makeText(getApplication(), fname+ " " + "Is Redirecting", Toast.LENGTH_SHORT).show(); 
       Intent i=new Intent(MainActivity.this,reg1.class); 
       startActivity(i); 
       } 
      } 
     }); 
    } 

reg1 класс

package com.example.app; 

import java.io.ByteArrayOutputStream; 
import java.io.UnsupportedEncodingException; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.CompoundButton; 
import android.widget.CompoundButton.OnCheckedChangeListener; 
import android.widget.ImageView; 
import android.widget.RadioButton; 
import android.widget.Toast; 



    public class reg1 extends 

    Activity{ 

     public static String GEENDER="gender"; 
     public static String imgDecodableString="imgDecodableStringr"; 
     //public static String GEENDER="gender"; 
     public static int RESULT_LOAD_IMG = 1; 
     Intent data ; 
     ImageView imageView; 
     Button register1; 

     Uri selectedImage ; 

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

     setContentView(R.layout.reg_1); 
     imageView=(ImageView)findViewById(R.id.img_select); 
     register1=(Button)findViewById(R.id.b_r1_add); 


     SharedPreferences sp1=getApplication().getSharedPreferences("pref", MODE_PRIVATE); 
     final Editor editor=sp1.edit(); 
     imageView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       loadimagefrmgallery(v); 

      } 
     }); 

     final RadioButton female=(RadioButton)findViewById(R.id.imageView1); 
     final RadioButton male=(RadioButton)findViewById(R.id.imageView2); 
     male.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 


       if(male.isChecked()) 
       { 
        male.setChecked(true); 
        GEENDER="male"; 
        female.setChecked(false); 
       } 

      } 
     }); 
     female.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // TODO Auto-generated method stub 

       if(female.isChecked()) 
       { 
        female.setChecked(true); 
        GEENDER="female"; 
        male.setChecked(false); 
       } 
      } 
     }); 



     register1.setOnClickListener(new OnClickListener() { 

      @SuppressWarnings("static-access") 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       DBHandler handler=new DBHandler(getApplicationContext()); 
       SQLiteDatabase db=handler.getWritableDatabase(); 
       Bitmap bitmap=BitmapFactory.decodeFile(imgDecodableString); 
       // convert bitmap to byte 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
       byte imageInByte[] = stream.toByteArray(); 

       String image = null; 
       try { 
        image = new String(imageInByte, "UTF"); 
       } catch (UnsupportedEncodingException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 



       String PERSON_PHOTO="Photo"; 
       String PERSON_GENDER="Gender"; 


       editor.putString(PERSON_PHOTO, image); 
       editor.putString(PERSON_GENDER, GEENDER); 
       editor.apply(); 
       Toast.makeText(getApplicationContext(), "moving", Toast.LENGTH_SHORT).show(); 
       Intent i=new Intent(reg1.this,reg2.class); 
       startActivity(i); 

      } 
     }); 


    } 

reg2 класс

package com.example.app; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemSelectedListener; 

public class reg2 extends Activity{ 

    Spinner s_con,s_stat,s_ct; 
    Button register2; 
    public static String country1,state1,city1; 


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

     setContentView(R.layout.reg_2); 

     s_con=(Spinner)findViewById(R.id.r_spin_con); 
     s_stat=(Spinner)findViewById(R.id.r_spin_stat); 
     s_ct=(Spinner)findViewById(R.id.r_spin_ct); 
     register2=(Button)findViewById(R.id.b_r2_add); 

     SharedPreferences sp2=getApplication().getSharedPreferences("pref", MODE_PRIVATE); 
     final Editor editor=sp2.edit(); 


     ArrayList<String>a=new ArrayList<String>(); 
     ArrayList<String>a1=new ArrayList<String>(); 
     ArrayList<String>a2=new ArrayList<String>(); 
     a.add("India"); 
     a.add("England"); 
     a.add("USA"); 
     a.add("Pakistan"); 
     a1.add("Panjab"); 
     a1.add("gujarat"); 
     a1.add("Berkshire"); 
     a2.add("surat"); 
     a2.add("great manchester"); 
     a2.add("london"); 


     final ArrayAdapter<String>adapter1=new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,a1); 
     final ArrayAdapter<String>adapter2=new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,a2); 
     final ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,a); 
     s_con.setAdapter(adapter); 
     s_stat.setAdapter(adapter1); 
     s_ct.setAdapter(adapter2); 

     s_con.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 


       country1=parent.getItemAtPosition(position).toString(); 
       Toast.makeText(getApplicationContext(), country1, Toast.LENGTH_SHORT).show(); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       // TODO Auto-generated method stub 

      } 
     }); 

     s_stat.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 
       state1=parent.getItemAtPosition(position).toString(); 
       Toast.makeText(getApplicationContext(), state1, Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     s_ct.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 

       city1=parent.getItemAtPosition(position).toString(); 
       Toast.makeText(getApplicationContext(), city1, Toast.LENGTH_SHORT).show(); 

      } 


      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       // TODO Auto-generated method stub 

      } 
     }); 







     register2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       DBHandler handler=new DBHandler(getApplicationContext()); 
       SQLiteDatabase db=handler.getWritableDatabase(); 



       String PERSON_COUNTRY="Country"; 
       String PERSON_STATE="State"; 
       String PERSON_CITY="City"; 


       editor.putString(PERSON_COUNTRY, country1); 
       editor.putString(PERSON_STATE, state1); 
       editor.putString(PERSON_CITY, city1); 
       editor.apply(); 

       Toast.makeText(getApplicationContext(), "moving", Toast.LENGTH_SHORT).show(); 
       Intent i=new Intent(reg2.this,reg3.class); 
       startActivity(i); 

      } 
     }); 

}} 

Reg3 класс

package com.example.app; 

import java.io.IOException; 
import java.util.ArrayList; 

import android.R.integer; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class reg3 extends Activity { 

    Spinner s_sq; 
    EditText dob,unm; 
    Button register3; 
    public static String PREF="pref"; 
    public static String def_val="default"; 

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

     s_sq=(Spinner)findViewById(R.id.r_spin_sq); 
     dob=(EditText) findViewById(R.id.r_e_dob); 
     unm=(EditText) findViewById(R.id.editText1); 
     register3=(Button)findViewById(R.id.b_add3); 
     ArrayList<String>a=new ArrayList<String>(); 
     final ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,a); 
     a.add("when were you born?"); 
     a.add("what is your nick name?"); 
     a.add("what is your childhood name"); 
     a.add("what city your parents were met"); 
     a.add("what is your city name"); 
     s_sq.setAdapter(adapter); 

     final SharedPreferences pref=getApplication().getSharedPreferences(PREF, MODE_PRIVATE); 
     final SharedPreferences pref1=getApplication().getSharedPreferences(PREF, MODE_PRIVATE); 
     final SharedPreferences pref2=getApplication().getSharedPreferences(PREF, MODE_PRIVATE); 


     register3.setOnClickListener(new OnClickListener() { 

      @SuppressWarnings("static-access") 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       DBHandler handler=new DBHandler(getApplicationContext()); 
       SQLiteDatabase db=handler.getWritableDatabase(); 
       String dob1=dob.getText().toString(); 
       String uname=unm.getText().toString(); 
       String sec_que=s_sq.getSelectedItem().toString(); 

       String PERSON_FNAME="FirstName"; 
       String PERSON_EMAIL="EmaiId"; 
       String PERSON_PASSWORD="Password"; 
       String PERSON_PHOTO="Photo"; 
       String PERSON_GENDER="Gender"; 
       String PERSON_COUNTRY="Country"; 
       String PERSON_STATE="State"; 
       String PERSON_CITY="City"; 


       String fname=pref.getString(PERSON_FNAME, def_val); 
       String email=pref.getString(PERSON_EMAIL, def_val); 
       String pwd=pref.getString(PERSON_PASSWORD, def_val); 
       String profile=pref1.getString(PERSON_PHOTO, def_val); 
       String gender=pref1.getString(PERSON_GENDER, def_val); 
       String country=pref2.getString(PERSON_COUNTRY, def_val); 
       String state=pref2.getString(PERSON_STATE, def_val); 
       String city=pref2.getString(PERSON_CITY, def_val); 

       handler.insert(fname, email, pwd, profile, gender, country, state, city, sec_que, dob1, uname); 


       Intent i=new Intent(reg3.this,home.class); 
       startActivity(i); 

       Toast.makeText(getApplicationContext(),"Registered", Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 

} 

LogCat

11-18 02:09:55.846: E/SQLiteDatabase(23920): Error inserting EmaiId=a State=1/1/1992 Gender=male Password=a FirstName=a Country=what is your childhood name Photo=default City=altu 
11-18 02:09:55.846: E/SQLiteDatabase(23920): android.database.sqlite.SQLiteConstraintException: register.Squestion may not be NULL (code 19) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at com.example.app.DBHandler.insert(DBHandler.java:94) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at com.example.app.reg3$1.onClick(reg3.java:84) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.view.View.performClick(View.java:4084) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.view.View$PerformClick.run(View.java:16966) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.os.Handler.handleCallback(Handler.java:615) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.os.Handler.dispatchMessage(Handler.java:92) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.os.Looper.loop(Looper.java:137) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at android.app.ActivityThread.main(ActivityThread.java:4745) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at java.lang.reflect.Method.invokeNative(Native Method) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at java.lang.reflect.Method.invoke(Method.java:511) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-18 02:09:55.846: E/SQLiteDatabase(23920): at dalvik.system.NativeStart.main(Native Method) 

ответ

1

Как и в TABLE_REGISTER, PERSON_S_QUE также доступен с TEXT NOT NULL, но при вставке данных в таблицу, не добавляя PERSON_S_QUE значение столбца в ContentValues.

Добавить следующее метода вставки:

cv.put(PERSON_S_QUE, sec_que); 
+1

огромные и большие благодаря ц ... дорогой .... я знал, что это нелепая ошибка им будет через BDW еще раз спасибо за ваш имп время вклада – farhan

+0

и я хочу, чтобы спросить u, что ........ почему поле профиля сохранить строку по умолчанию ...... любая идея? у этого feild есть blob ......... так и по этой причине он становится хранимым со String по умолчанию? – farhan

+0

@farhan: где поле профиля? –

Смежные вопросы