2013-02-21 2 views
-1

이 질문은 어딘가에서 해결되었을 수도 있지만 제대로 이해할 수 없으므로 데이터베이스에 대한 도움을 받으십시오.데이터베이스에서 데이터를 검색하고 목록에 추가 할 수 없습니다.

데이터베이스에서 데이터를 검색하려고하는데 null 포인터 예외가 호출되었습니다.

여기에 목록 ID가 표시되는 클래스가 있습니다.

ReviewList.java는

public class ReviewList extends ListActivity{ 
    private ReviewsDataSource datasource; 
    // Place Details 
    PlaceDetails placeDetails; 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.review); 
     Button b = (Button) findViewById(R.id.reviewbutton); 
     datasource = new ReviewsDataSource(this); 
     datasource.open(); 

     List<Review> values = datasource.getAllReviews(placeDetails.result.reference); 


     // Use the SimpleCursorAdapter to show the 
     // elements in a ListView 
     ArrayAdapter<Review> adapter = new ArrayAdapter<Review>(this, 
     android.R.layout.simple_list_item_1, values); 
     setListAdapter(adapter); 

     b.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       @SuppressWarnings("unchecked") 
       ArrayAdapter<Review> adapter = (ArrayAdapter<Review>) getListAdapter(); 
       Review review = null; 

       EditText et = (EditText) findViewById(R.id.reviewtext); 
       String text= et.getText().toString(); 

       review=datasource.createReview(text, placeDetails.result.reference); 
       adapter.add(review); 
       adapter.notifyDataSetChanged(); 
      } 
     }); 
     } 




    @Override 
     protected void onResume() { 
     datasource.open(); 
     super.onResume(); 
     } 

     @Override 
     protected void onPause() { 
     datasource.close(); 
     super.onPause(); 
     } 


} 

여기 여기 리뷰 클래스를

public class Review { 

    private String id; 
     private String review; 

     public String getId() { 
     return id; 
     } 

     public void setId(String id) { 
     this.id = id; 
     } 

     public String getReview() { 
     return review; 
     } 

     public void setReview(String review) { 
     this.review = review; 
     } 

     // Will be used by the ArrayAdapter in the ListView 
     @Override 
     public String toString() { 
     return review; 
     } 
} 

을 데이터베이스의 모든 작업이 일어나는 ReviewsDataSource.java입니다.

public class ReviewsDataSource { 

    private SQLiteDatabase database; 
    private Database dbHelper; 

    private String[] allColumns = { Database.COLUMN_ID, 
       Database.COLUMN_REVIEW }; 


    public ReviewsDataSource(Context context) { 
      dbHelper = new Database(context); 
      } 

    public void open() throws SQLException { 
      database = dbHelper.getWritableDatabase(); 
      } 

    public void close() { 
      dbHelper.close(); 
      } 
    public Review createReview(String review, String reference) { 
      ContentValues values = new ContentValues(); 
      values.put(Database.COLUMN_REVIEW, review); 
      values.put(Database.COLUMN_ID, reference); 
      database.insert(Database.TABLE_REVIEWS, null, values); 
      Cursor cursor = database.query(Database.TABLE_REVIEWS, 
       allColumns, Database.COLUMN_ID + " = " + reference, null, 
       null, null, null); 
      cursor.moveToFirst(); 
      Review newReview = cursorToReview(cursor); 
      cursor.close(); 
      return newReview; 
      } 

    public void deleteReview(Review comment) { 
      String id = comment.getId(); 
      System.out.println("Comment deleted with id: " + id); 
      database.delete(Database.TABLE_REVIEWS, Database.COLUMN_ID 
       + " = " + id, null); 
      } 
    public List<Review> getAllReviews(String reference) { 
      List<Review> comments = new ArrayList<Review>(); 
      Cursor cursor = database.query(Database.TABLE_REVIEWS, 
        allColumns, null, null, null, null, null); 
      cursor.moveToFirst(); 
      while (!cursor.isAfterLast()) { 
       Review review = cursorToReview(cursor); 
       if(cursor.getString(0)==reference) 
       { 
       comments.add(review); 
       } 
       cursor.moveToNext(); 
      } 
      // Make sure to close the cursor 
      cursor.close(); 
      return comments; 


    } 




    private Review cursorToReview(Cursor cursor) { 
     // TODO Auto-generated method stub 
     Review review = new Review(); 
     review.setId(cursor.getString(0)); 
     review.setReview(cursor.getString(1)); 
     return review; 
    } 

} 

마지막으로 database.java 클래스

public class Database extends SQLiteOpenHelper { 

    public static final String TABLE_REVIEWS = "reviews"; 
     public static final String COLUMN_ID = "_id"; 
     public static final String COLUMN_REVIEW = "REVIEW"; 

     private static final String DATABASE_NAME = "reviews.db"; 
     private static final int DATABASE_VERSION = 1; 

     private static final String DATABASE_CREATE = "create table " 
       + TABLE_REVIEWS + "(" + COLUMN_ID 
       + " text not null, " + COLUMN_REVIEW 
       + " text not null);"; 

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

    @Override 
    public void onCreate(SQLiteDatabase database) { 
     // TODO Auto-generated method stub 
     database.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     Log.w(Database.class.getName(), 
       "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_REVIEWS); 
     onCreate(db); 
    } 
} 

이 내 로그 캣

02-21 10:49:08.957: E/AndroidRuntime(24586): FATAL EXCEPTION: main 
02-21 10:49:08.957: E/AndroidRuntime(24586): 
java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.example.fueled_assignment_1/com.example.fueled_assignment_1.ReviewList}: 
java.lang.NullPointerException 02-21 10:49:08.957: 
E/AndroidRuntime(24586): at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872) 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893) 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
android.app.ActivityThread.access$1500(ActivityThread.java:135) 02-21 
10:49:08.957: E/AndroidRuntime(24586):  at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054) 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
android.os.Handler.dispatchMessage(Handler.java:99) 02-21 
10:49:08.957: E/AndroidRuntime(24586):  at 
android.os.Looper.loop(Looper.java:150) 02-21 10:49:08.957: 
E/AndroidRuntime(24586): at 
android.app.ActivityThread.main(ActivityThread.java:4389) 02-21 
10:49:08.957: E/AndroidRuntime(24586):  at 
java.lang.reflect.Method.invokeNative(Native Method) 02-21 
10:49:08.957: E/AndroidRuntime(24586):  at 
java.lang.reflect.Method.invoke(Method.java:507) 02-21 10:49:08.957: 
E/AndroidRuntime(24586): at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 02-21 
10:49:08.957: E/AndroidRuntime(24586):  at 
dalvik.system.NativeStart.main(Native Method) 02-21 10:49:08.957: 
E/AndroidRuntime(24586): **Caused by: java.lang.NullPointerException 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
com.example.fueled_assignment_1.ReviewList.onCreate(ReviewList.java:26)** 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
02-21 10:49:08.957: E/AndroidRuntime(24586): at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836) 
02-21 10:49:08.957: E/AndroidRuntime(24586): ... 11 more 
친절

제가 큰 혼란

+0

어디 라인 NUM (26) ReviewList.java은? –

+0

목록 값 = datasource.getAllReviews (placeDetails.result.reference); 이 줄 26 – sohil

답변

0

당신의 생각 문제를 해결하는 데 도움이 있습니다 검토 DAO를 사용하여 사용자 정의 배열 어댑터를 작성해야합니다

확인이 예 only text as an array

Images and array

및 알려

+0

나는 그렇게 생각하지 않는다 ... 나는이 튜토리얼 [link] (http://www.vogella.com/articles/AndroidSQLite/article.html)을 사용했으며 아무것도 사용자 정의 배열 어댑터 – sohil

관련 문제