2013-09-30 31 views
0

我已通过所有关于从数据库中存取数据,虽然我不能,所以我在这个网站上发布我的问题解决我的问题可以后去检索到的EditText领域。我想访问以前存储的SQL表。我的代码在存储数据时可以正常工作,但是当我点击保存按钮但是按下Load按钮时它不工作,这意味着它插入的是空值而非存储的值。的Android ::数据不通过数据库

这里是我的代码..

public class SetValue extends Fragment { 




    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     // TODO Auto-generated method stub 
     super.onSaveInstanceState(outState); 
     populateData(); 
    } 

    Button save, Load; 
    EditText firstName, name, patientID, minH, maxH, minI, maxI, minB, maxB; 
    private String nameofP,FName,pID; 
    private String HRM,HRX,IBIM,IBIX,BRM,BRX; 
    private String nameET,firstNameET,pIDET; 
    private String minHET,maxHET,minIET,maxIET,minBET,maxBET; 
    Patient patient=new Patient(); 

    @Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     populateData(); 
    } 

    @SuppressWarnings("deprecation") 
    DatabaseHandler populateData() { 
     // TODO Auto-generated method stub 
     DatabaseHandler mDatabase= new DatabaseHandler(getActivity()); 

     SQLiteDatabase sql=mDatabase.getReadableDatabase(); 
     Cursor cursor = sql.query(mDatabase.NAME_TABLE, null, null, null, null, null, null); 
    getActivity().startManagingCursor(cursor); 
     while (cursor.moveToNext()) { 

      String cFirstname = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_NAME)); 
      String cName  = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_HR)); 
      String cPID = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_IBI)); 
      String cHeartRateMin = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_HMIN)); 
      String cHeartRateMax = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_HMAX)); 
      String cIBIMin = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_IMIN)); 
      String cIBIMax = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_IMAX)); 
      String cBreathingRateMin = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_BMIN)); 
      String cBreathingRateMax = cursor.getString(cursor.getColumnIndex(mDatabase.KEY_BMAX)); 

      Patient currentPatient= new Patient(); 
      currentPatient.setName(cName); 
      currentPatient.setFirstName(cFirstname); 
      currentPatient.setId(cPID); 
      currentPatient.setNumHeartRateMin(cHeartRateMin); 
      currentPatient.setNumHeartRateMax(cHeartRateMax); 
      currentPatient.setNumInterBeatIntervalMin(cIBIMin); 
      currentPatient.setNumInterBeatIntervalMax(cIBIMax); 
      currentPatient.setNumBreathingrateMin(cBreathingRateMin); 
      currentPatient.setNumBreathingrateMax(cBreathingRateMax); 

     } 
     sql.close(); 
     return mDatabase; 

    } 

DatabaseHandler dbhandler = new DatabaseHandler(getActivity()); 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     final View myFragmentView = inflater.inflate(
     R.layout.set_value_fragment, container, false); 


     save = (Button) myFragmentView.findViewById(R.id.Save); 
     save.setOnClickListener(onClickSave(myFragmentView)); 
     Load = (Button) myFragmentView.findViewById(R.id.btn4); 
     Load.setOnClickListener(onClickLoad(myFragmentView)); 

     firstName=(EditText)myFragmentView.findViewById(R.id.FN); 
     name=(EditText)myFragmentView.findViewById(R.id.name); 
     patientID=(EditText)myFragmentView.findViewById(R.id.PID); 
     minH=(EditText)myFragmentView.findViewById(R.id.Hmin); 
     maxH=(EditText)myFragmentView.findViewById(R.id.Hmax); 
     minI=(EditText)myFragmentView.findViewById(R.id.Imin); 
     maxI=(EditText)myFragmentView.findViewById(R.id.Imax); 
     minB=(EditText)myFragmentView.findViewById(R.id.Bmin); 
     maxB=(EditText)myFragmentView.findViewById(R.id.Bmax); 

     return myFragmentView; 
    } 

    private OnClickListener onClickLoad(View myFragmentView) { 
     // TODO Auto-generated method stub 
     return new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       firstName.setText(nameofP); 
       name.setText(FName); 
       patientID.setText(pID); 
       minH.setText(String.valueOf(HRM)); 
       maxH.setText(String.valueOf(HRX)); 
       minI.setText(String.valueOf(IBIM)); 
       maxI.setText(String.valueOf(IBIX)); 
       minB.setText(String.valueOf(BRM)); 
       maxB.setText(String.valueOf(BRX)); 
       updateDetails(patient); 

      } 

      private void updateDetails(Patient patient) { 
       // TODO Auto-generated method stub 
       DatabaseHandler androidDbHelper = new DatabaseHandler(getActivity()); 
       SQLiteDatabase sql=androidDbHelper.getWritableDatabase(); 
       ContentValues contentValues = new ContentValues(); 
       contentValues.put(androidDbHelper.KEY_NAME, nameET); 
       contentValues.put(androidDbHelper.KEY_HR, firstNameET); 
       contentValues.put(androidDbHelper.KEY_IBI, pIDET); 
       contentValues.put(androidDbHelper.KEY_HMIN, minHET); 
       contentValues.put(androidDbHelper.KEY_HMAX, maxHET); 
       contentValues.put(androidDbHelper.KEY_IMIN, minIET); 
       contentValues.put(androidDbHelper.KEY_IMAX, maxIET); 
       contentValues.put(androidDbHelper.KEY_BMIN, minBET); 
       contentValues.put(androidDbHelper.KEY_BMAX, maxBET); 

       String[] clauseArgument= new String[1]; 
       clauseArgument[0]=patient.getName(); 
       System.out.println("whereClauseArgument[0] is :" + clauseArgument[0]); 

       sql.update(androidDbHelper.NAME_TABLE, contentValues, androidDbHelper.KEY_NAME+"=?", clauseArgument); 
       sql.close(); 

      } 

     }; 
    } 

    private OnClickListener onClickSave(final View myFragmentView) { 
     return new OnClickListener() { 

      /** 
      * 
      * @see android.view.View.OnClickListener#onClick(android.view.View) 
      */ 
      @Override 
      public void onClick(View v) { 

       //set the values that we extracted 
       nameET=firstName.getText().toString(); 
       firstNameET=name.getText().toString(); 
       pIDET=patientID.getText().toString(); 
       minHET=minH.getText().toString(); 
       maxHET= maxH.getText().toString(); 
       minIET= minI.getText().toString(); 
       maxIET=maxI.getText().toString(); 
       minBET=minB.getText().toString(); 
       maxBET=maxB.getText().toString(); 


       patient.setName(nameofP); 
       patient.setFirstName(FName); 
       patient.setId(pID); 
       patient.setNumHeartRateMin(HRM); 
       patient.setNumHeartRateMax(HRX); 
       patient.setNumInterBeatIntervalMin(IBIM); 
       patient.setNumInterBeatIntervalMax(IBIX); 
       patient.setNumBreathingrateMin(BRM); 
       patient.setNumBreathingrateMax(BRX); 
       insertData(patient); 

      } 

      public void insertData(Patient patient) { 
       DatabaseHandler androidDbHelper = new DatabaseHandler(getActivity()); 
       SQLiteDatabase sql=androidDbHelper.getWritableDatabase(); 
       ContentValues contentValues = new ContentValues(); 
       contentValues.put(androidDbHelper.KEY_NAME, patient.getName()); 
       contentValues.put(androidDbHelper.KEY_HR, patient.getFirstName()); 
       contentValues.put(androidDbHelper.KEY_IBI, patient.getId()); 
       contentValues.put(androidDbHelper.KEY_HMIN, patient.getNumHeartRateMin()); 
       contentValues.put(androidDbHelper.KEY_HMAX, patient.getNumHeartRateMax()); 
       contentValues.put(androidDbHelper.KEY_IMIN, patient.getNumInterBeatIntervalMin()); 
       contentValues.put(androidDbHelper.KEY_IMAX, patient.getNumInterBeatIntervalMax()); 
       contentValues.put(androidDbHelper.KEY_BMIN, patient.getNumBreathingrateMin()); 
       contentValues.put(androidDbHelper.KEY_BMAX, patient.getNumBreathingrateMax()); 
       long columnID=sql.insert(androidDbHelper.NAME_TABLE, null, contentValues); 
       sql.close(); 
       Toast.makeText(getActivity().getBaseContext(), "Values inserted column ID is :" + columnID, Toast.LENGTH_SHORT).show(); 

      } 
     }; 
    } 

} 

这里是我的DatadaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper { 

    // Database fields 
    public SQLiteDatabase db; 

    public DatabaseHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 
private static final int DATABASE_VERSION = 3; 

    // Database Name 
    private static final String DATABASE_NAME = "dataManager"; 
    public static final String NAME_TABLE = "nametable"; 

    // Contacts table name 

    public static final String KEY_NAME = "name"; 
    public static final String KEY_HR = "firstName"; 
    public static final String KEY_IBI = "patientID"; 
    public static final String KEY_HMIN = "MinimumofHeartRate"; 
    public static final String KEY_HMAX = "MaximumofHeartRate"; 
    public static final String KEY_IMIN = "MinimumofIBI"; 
    public static final String KEY_IMAX = "MaximumofIBI"; 
    public static final String KEY_BMIN = "MinimumofBreathingRate"; 
    public static final String KEY_BMAX = "MaximumofBreathingRate"; 

    private static final String TEXT_TYPE = " TEXT"; 
    private static final String COMMA_SEP = ", "; 


    // Creating Tables 
    static final String DATABASE_CREATE_FIRST = "CREATE TABLE IF NOT EXISTS " 
      + NAME_TABLE + "(" + KEY_NAME + TEXT_TYPE + COMMA_SEP + KEY_HR 
      + TEXT_TYPE + COMMA_SEP + KEY_IBI + TEXT_TYPE + COMMA_SEP 
      + KEY_HMIN + TEXT_TYPE + COMMA_SEP + KEY_HMAX + TEXT_TYPE 
      + COMMA_SEP + KEY_IMIN + TEXT_TYPE + COMMA_SEP + KEY_IMAX 
      + TEXT_TYPE + COMMA_SEP + KEY_BMIN + TEXT_TYPE + COMMA_SEP 
      + KEY_BMAX + TEXT_TYPE + ")"; 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(DATABASE_CREATE_FIRST); 

    } 


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_CREATE_FIRST); 
     onCreate(db); 


    } 

这里是我的getter和setter变量:: patient.java

public class Patient { 
    private String id; 
    private String firstName; 
    private String name; 
    private String numHeartRateMin, numHeartRateMax, numInterBeatIntervalMin, numInterBeatIntervalMax, 
        numBreathingrateMin, numBreathingrateMax; 

    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getNumHeartRateMin() { 
     return numHeartRateMin; 
    } 
    public void setNumHeartRateMin(String numHeartRateMin) { 
     this.numHeartRateMin = numHeartRateMin; 
    } 
    public String getNumHeartRateMax() { 
     return numHeartRateMax; 
    } 
    public void setNumHeartRateMax(String numHeartRateMax) { 
     this.numHeartRateMax = numHeartRateMax; 
    } 
    public String getNumInterBeatIntervalMin() { 
     return numInterBeatIntervalMin; 
    } 
    public void setNumInterBeatIntervalMin(String numInterBeatIntervalMin) { 
     this.numInterBeatIntervalMin = numInterBeatIntervalMin; 
    } 
    public String getNumInterBeatIntervalMax() { 
     return numInterBeatIntervalMax; 
    } 
    public void setNumInterBeatIntervalMax(String numInterBeatIntervalMax) { 
     this.numInterBeatIntervalMax = numInterBeatIntervalMax; 
    } 
    public String getNumBreathingrateMin() { 
     return numBreathingrateMin; 
    } 
    public void setNumBreathingrateMin(String numBreathingrateMin) { 
     this.numBreathingrateMin = numBreathingrateMin; 
    } 
    public String getNumBreathingrateMax() { 
     return numBreathingrateMax; 
    } 
    public void setNumBreathingrateMax(String numBreathingrateMax) { 
     this.numBreathingrateMax = numBreathingrateMax; 
    } 

} 

我知道,我把长码,但相信我这些是必要的来形容我的问题...

+0

你可以在onClick方法中记录一些信息并检查它是否被执行? – Raghunandan

回答

0

您正在将Null字符串插入到Pacient中并保存在数据库中。

第一:

创建全局Pacient:

Patient currentPatient= new Patient(); 

后,onClickLoad:

@Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      firstName.setText(currentPatient.getName()); 
      name.setText(currentPatient.getFirstName()); 
      patientID.setText(currentPatient.getId()); 
      minH.setText(currentPatient.getNumHeartRateMin()); 
      maxH.setText(currentPatient.getNumHeartRateMax()); 
      minI.setText(currentPatient.getNumInterBeatIntervalMin()); 
      maxI.setText(currentPatient.getNumInterBeatIntervalMax()); 
      minB.setText(currentPatient.getNumBreathingrateMin()); 
      maxB.setText(currentPatient.getNumBreathingrateMax()); 
      updateDetails(patient); 

     } 

此修复保存操作。

nameET=firstName.getText().toString(); 
    firstNameET=name.getText().toString(); 
    pIDET=patientID.getText().toString(); 
    minHET=minH.getText().toString(); 
    maxHET= maxH.getText().toString(); 
    minIET= minI.getText().toString(); 
    maxIET=maxI.getText().toString(); 
    minBET=minB.getText().toString(); 
    maxBET=maxB.getText().toString(); 


    patient.setName(nameET); 
    patient.setFirstName(firstNameET); 
    patient.setId(pIDET); 
    patient.setNumHeartRateMin(minHET); 
    patient.setNumHeartRateMax(maxHET); 
    patient.setNumInterBeatIntervalMin(minIET); 
    patient.setNumInterBeatIntervalMax(maxIET); 
    patient.setNumBreathingrateMin(minBET); 
    patient.setNumBreathingrateMax(maxBET); 
    insertData(patient); 
+0

它的工作原理...dankeschön – Hiren

+0

为什么我没有得到以前存储的数据..例如,首先我通过单击保存按钮来存储所有数据,我也可以加载它。但是,当我输入第二个数据时,如果我想访问先前的数据,那么我正面临问题,那么它将检索最近的数据,而不是先前的实际数据....希望您了解我的问题。 – Hiren

+0

因为您在populateData中使用a while(cursor.moveToNext()){...由此,最后一条记录将被设置,您需要更改查询以获得您想要的患者 –