2017-12-06 2 views
-2

안녕하세요 저는 android에 익숙하지 않습니다. sqlite에서 데이터를 가져오고 nullpointer 참조를 얻으려고합니다. 제발 도와주세요.sqlite에서 null 객체 참조에 가상 메소드를 호출하려고 시도했습니다.

여기 내 코드입니다 : -

Databasehelper.java

public class DatabaseHelper extends SQLiteOpenHelper{ 
    private final static String DATABASE_NAME="Reminder_details.db"; 
    private final static String TABLE_NAME="Reminder_detail_insert_tbl"; 
    private final static String CAL_NO1="Category_img"; 
    private final static String CAL_NO2="Category_Type"; 
    private final static String CAL_NO3="Title"; 
    private final static String CAL_NO4="Description"; 
    private final static String CAL_NO5="Repeat_type"; 
    private final static String CAL_NO6="Repeat_value"; 
    private final static String CAL_NO7="sun_Remind"; 
    private final static String CAL_NO8="mon_remind"; 
    private final static String CAL_NO9="tue_remind"; 
    private final static String CAL_NO10="wed_remind"; 
    private final static String CAL_NO11="thu_remind"; 
    private final static String CAL_NO12="fri_remind"; 
    private final static String CAL_NO13="sat_remind"; 
    private final static String CAL_NO14="active_date"; 
    private final static String CAL_NO15="active_end_date"; 
    private final static String CAL_NO16="creation_date"; 

    public DatabaseHelper(Context context) { 

     super(context, DATABASE_NAME, null, 1); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL("Create Table " +TABLE_NAME +"(ID INTEGER PRIMARY KEY AUTOINCREMENT,Category_img BLOB,Category_Type TEXT,Title TEXT,Description TEXT,Repeat_type TEXT,Repeat_value INTEGER,sun_Remind TEXT,mon_remind TEXT,tue_remind TEXT,wed_remind TEXT,thu_remind TEXT,fri_remind TEXT,sat_remind TEXT,active_date TEXT,active_end_date TEXT,creation_date DATETIME DEFAULT CURRENT_TIMESTAMP)"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
     onCreate(db); 
    } 


    public boolean DataInsert(
        byte[] Category_img, 
        String Category_Type, 
        String Title, 
        String Description, 
        String Repeat_type, 
        int Repeat_value, 
        String sun_Remind, 
        String mon_Remind, 
        String tue_remind, 
        String wed_remind, 
        String thu_remind, 
        String fri_remind, 
        String sat_remind, 
        String active_date, 
        String active_end_date 
     ) 
    { 
     SQLiteDatabase db= getWritableDatabase(); 
     ContentValues cv=new ContentValues(); 
     cv.put(CAL_NO1,Category_img); 
     cv.put(CAL_NO2,Category_Type); 
     cv.put(CAL_NO3,Title); 
     cv.put(CAL_NO4,Description); 
     cv.put(CAL_NO5,Repeat_type); 
     cv.put(CAL_NO6,Repeat_value); 
     cv.put(CAL_NO7,sun_Remind); 
     cv.put(CAL_NO8,mon_Remind); 
     cv.put(CAL_NO9,tue_remind); 
     cv.put(CAL_NO10,wed_remind); 
     cv.put(CAL_NO11,thu_remind); 
     cv.put(CAL_NO12,fri_remind); 
     cv.put(CAL_NO13,sat_remind); 
     cv.put(CAL_NO14,active_date); 
     cv.put(CAL_NO15,active_end_date); 


     long result=db.insert(TABLE_NAME,null,cv); 

     if(result==-1) 
      return false; 
     else 
      return true; 


    } 


    public Cursor getdata() 
    { 
     SQLiteDatabase db= getWritableDatabase(); 
     Cursor res=db.rawQuery("select * from "+TABLE_NAME,null); 
     return res; 
    } 

}  

이것은 RecyclerAdaptor 여기 좀 도와주세요 테이블에서 런타임에 데이터를 얻을 수 있습니다.

이 recycleradaptor에서 테이블에서 데이터를 가져 오는 중 오류가 발생합니다.

Cursor result=mydb.getdata();이 줄에는 오류가 발생합니다.

RecyclerAdaptor.java이

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> 
{ 
    DatabaseHelper mydb; 
    List<String> title_list,description_list; 
    private String[] title ={"Timetable","Subjects","Faculty","Resources"}; 
    private String[] description={"description1","description2","description3","description4"}; 
    private int[] images={R.drawable.table,R.drawable.books,R.drawable.faculty,R.drawable.res}; 
// 
// public void getdatadb() 
// { 
// 
// 
//  title_list=new ArrayList<String>(); 
//  description_list=new ArrayList<String>(); 
// 
// 
//  Cursor result=mydb.getdata(); 
// 
//  if(result.getCount()==0) 
//  { 
//   return; 
//  }else 
//  { 
//   while (result.moveToNext()){ 
//    title_list.add(result.getString(2)); 
//    description_list.add(result.getString(3)); 
// 
// 
//   } 
//  } 
// 
// 
// 
// } 


    public class ViewHolder extends RecyclerView.ViewHolder{ 
     TextView mTextTile,mTextDescription; 
     ImageView mImageview; 

     public ViewHolder(View itemView) 
     { 
      super(itemView); 
      mTextTile=(TextView)itemView.findViewById(R.id.tvmain); 
      mTextDescription=(TextView)itemView.findViewById(R.id.tvdescription); 
      mImageview=(ImageView)itemView.findViewById(R.id.ivmain); 

      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int position=getAdapterPosition(); 
        String text=mTextTile.getText().toString(); 
        Snackbar.make(v,"Click Detected onItem "+position+" Item :"+text,Snackbar.LENGTH_LONG).setAction("Action",null).show(); 
       } 
      }); 

     } 
    } 


    @Override 
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    { 
     View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout,parent,false); 
     ViewHolder viewHolder=new ViewHolder(view); 


     title_list=new ArrayList<String>(); 
     description_list=new ArrayList<String>(); 


     Cursor result=mydb.getdata(); 

     while (result.moveToNext()){ 
      title_list.add(result.getString(2)); 
      description_list.add(result.getString(3)); 
     } 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerAdapter.ViewHolder holder, int position) 
    { 
     holder.mTextTile.setText(title_list.get(position)); 
     holder.mTextDescription.setText(description_list.get(position)); 
     holder.mImageview.setImageResource(images[position]); 
    } 

    @Override 
    public int getItemCount() { 
     return title.length; 
    } 

} 
+1

여기 –

+0

있는 mydb 귀하의 오류를 게시 :

mydb = new DatabaseHelper(parent.getContext()); 

그래서 당신의 방법은 같다 초기화되지 않았습니다. –

답변

0

"onCreateViewHolder()"의 시작이 줄을 추가

@Override 
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 
    mydb = new DatabaseHelper(parent.getContext()); 
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_layout,parent,false); 
    ViewHolder viewHolder=new ViewHolder(view); 


    title_list=new ArrayList<String>(); 
    description_list=new ArrayList<String>(); 


    Cursor result=mydb.getdata(); 

    while (result.moveToNext()){ 
     title_list.add(result.getString(2)); 
     description_list.add(result.getString(3)); 
    } 
    return viewHolder; 
} 
+0

그쪽으로 nk 너 너무 많이이 문제가 해결 됐어. 왜 내가이 줄을 추가해야하는지 알 수 있겠 니? 너는 나에게 설명해 주실 수 있겠 니?. 미래에 이런 종류의 문제가 생길지 모른다. –

+0

데이터베이스 메소드에 액세스하려면 "데이터베이스 도우미"를 초기화해야합니다. –

+0

감사합니다. 더 많은 것이 필요하면 알려주세요. –

관련 문제