2012-10-02 5 views
0

아래에있는 내 로그 캣을이 내 데이터베이스 관리 클래스입니다 확인하시기 바랍니다이 예외가 발생하는 이유를 도와 줄 수 있습니까?

public class MyDbManager { 

private String DB_NAME="MyDb"; 
private String TABLE="TableReg"; 
private int DB_VERSION=1; 
//private String ID="id"; 
private String Fname="Fname"; 
private String Lname="Lname"; 
private String Email="Email"; 
private String Password="Password"; 
private String Language="Languages"; 
private String Gender ="gender"; 
private String Id="id"; 

private SQLiteDatabase sdb; 
Context context; 
public MyDbManager(Context context) { 
    // TODO Auto-generated constructor stub 
    this.context=context; 
    CustomSQLiteOpenHelper helper= new CustomSQLiteOpenHelper(context); 
    this.sdb=helper.getWritableDatabase();  
} 

public void insertValues(String fn,String ln, String em, String pwd) 
{ 
    ContentValues values=new ContentValues(); 
    values.put(Fname, fn); 
    values.put(Lname, ln); 
    values.put(Email, em); 
    values.put(Password, pwd); 

// values.put (언어, LANG); // values.put (Gender, gen);

sdb.insert(TABLE, null, values); 
} 


public ArrayList<Object> getRow(String email) 
{ 
    // create an array list to store data from the database row. 
    // I would recommend creating a JavaBean compliant object 
    // to store this data instead. That way you can ensure 
    // data types are correct. 
    ArrayList<Object> rowArray = new ArrayList<Object>(); 
    Cursor cursor; 

    try 
    { 

     cursor = sdb.query 
     (
       TABLE, 
       new String[]{Id,Fname,Lname,Email,Password}, 
       Email + "=" + email, 
       null, null, null, null, null 
     ); 

     // move the pointer to position zero in the cursor. 
     cursor.moveToFirst(); 

     // if there is data available after the cursor's pointer, add 
     // it to the ArrayList that will be returned by the method. 
     if (!cursor.isAfterLast()) 
     { 
      do 
      { 
       rowArray.add(cursor.getLong(0)); 
       rowArray.add(cursor.getString(1)); 
       rowArray.add(cursor.getString(2)); 
       rowArray.add(cursor.getString(3)); 
       rowArray.add(cursor.getString(4)); 

      } 
      while (cursor.moveToNext()); 
     } 

     // let java know that you are through with the cursor. 
     cursor.close(); 
    } 
    catch (SQLException e) 
    { 
     Log.e("DB ERROR", e.toString()); 
     e.printStackTrace(); 
    } 

    // return the ArrayList containing the given row from the database. 
    return rowArray; 
} 
private class CustomSQLiteOpenHelper extends SQLiteOpenHelper 
{ 
    public CustomSQLiteOpenHelper(Context context) 
    { 
     super(context,DB_NAME,null,DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 

     String newTableQueryString = " create table " + 
             TABLE + 
             " (" + 
             Id + " integer primary key autoincrement not null," + 
             Fname + " text," + 
             Lname + " text," + 
             Email + " text," + 
             Password + " text" + 
             ");"; 


     db.execSQL(newTableQueryString); 
    } 


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

}

내가 행을 검색하기 위해 시도한 활동 :

public class Login extends Activity { 

MyDbManager dbm; 
EditText ed_em,ed_ps; 
Button btn_sgn_in; 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 
    dbm=new MyDbManager(this); 
    setupviews(); 
    btn_sgn_in.setOnClickListener(new OnClickListener() { 

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

} 

public void retrieveRow() 
{ 
    String Email=ed_em.getText().toString(); 
    ArrayList<Object> row; 
    row=dbm.getRow(Email); 
    String r1=(String)row.get(3); 
    Toast.makeText(getBaseContext(), r1, Toast.LENGTH_LONG).show(); 

} 
public void setupviews() 
{ 
    ed_em=(EditText)findViewById(R.id.ed_email_ver); 
    ed_ps=(EditText)findViewById(R.id.ed_pass_ver); 
    btn_sgn_in=(Button)findViewById(R.id.btn_sgn_in); 
} 

} 나는 데이터베이스에서 행을 검색하는 것을 시도하고 있었고, 난이 오류가 발생했습니다

. 제발 도와주세요. 나는 안드로이드가 처음이다. enter image description here

+0

귀하의 ArrayList에 만약 조건

if(arraylist.size()>3) { //use arraylist here } 

및 dbhelper에 방법을 변경에 ArrayList의 첫 번째의 크기가 outofindex하게된다. –

답변

1

체크

public ArrayList<Object> getRow(String email) 
{ 
    // create an array list to store data from the database row. 
    // I would recommend creating a JavaBean compliant object 
    // to store this data instead. That way you can ensure 
    // data types are correct. 
    ArrayList<Object> rowArray = new ArrayList<Object>(); 
    Cursor cursor; 

    try 
    { 
     Cursor cursor = this.db.query(TABLE, new String[] { "Id,Fname,Lname,Email,Password" }, 
       "Email = \"" + email +"\" " , null, null, null,null); 

     if (cursor.moveToFirst()) { 
      do { 
        rowArray.add(cursor.getLong(0)); 
        rowArray.add(cursor.getString(1)); 
        rowArray.add(cursor.getString(2)); 
        rowArray.add(cursor.getString(3)); 
        rowArray.add(cursor.getString(4));    


       } while (cursor.moveToNext()); 
      } 
      if (cursor != null && !cursor.isClosed()) { 
      cursor.close(); 
      } 
    } 
    catch (SQLException e) 
    { 
     Log.e("DB ERROR", e.toString()); 
     e.printStackTrace(); 
    } 

    // return the ArrayList containing the given row from the database. 
    return rowArray; 
} 
+0

그러나 데이터베이스에서 행을 검색 할 수 없습니다. – Deepthi

+0

도와주세요. 요소를 액세스하기 전에 arraylist를 인쇄 한 다음 –

+0

을 확인해주세요. 그 코드가 비어 있습니다. 코드를 확인하고 잘못 된 부분을 볼 수 있습니까? DataBase Manager 클래스 자체에서 빈 배열 목록으로 표시됩니다. 그러나 값은 데이터베이스에 삽입됩니다. 나는 그것을 확인했다. – Deepthi

1

그것은 당신이 당신의 ArrayList (인덱스 = 3)하지만 당신은 바운드를 벗어 귀하의 ArrayList의 크기가 0, 당신은 당신이 데이터를 추가했는지 확인 할 수의 세 번째 요소를 호출하는 것을 말한다 이런 종류의 예외를 피하기 위해 또는 ArrayList이 비어 있지 않은지 확인하기 전에 기능을 확인하기 전에 ArrayList을 사용하십시오. 행운을 빕니다.

관련 문제