2017-01-18 2 views
0

Я хочу получить данные из sqlite и отобразить их с помощью cardview. Я уже читал и искал возможное решение моей проблемы, но проблема все еще существует. когда я пытался извлечь данные, на дисплее не отображается вывод, хотя данные, безусловно, существуют в базе данных. это мой код базы данных для получения всех файлов:извлекать и отображать данные из sqlite и отображения с использованием cardview

public List<Research> getAllResearch() { 
    List<Research> researchList = new ArrayList<Research>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + FILE_TABLE; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Research research = new Research(); 
      research.setId(Integer.parseInt(cursor.getString(0))); 
      research.setTitle(cursor.getString(1)); 
      research.setAuthor(cursor.getString(2)); 
      research.setYear(cursor.getString(3)); 
      research.setDesc(cursor.getString(4)); 
      // Adding research to list 
      researchList.add(research); 
     } while (cursor.moveToNext()); 
    } 

    Log.d(TAG,"student data"+ researchList.toString()); 

    // return research list 
    return researchList; 
} 

CustomAdapter.java;

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> { 

static Context context; 
CustomAdapter(Context context){ 
    this.context=context; 
} 
static List<Research> my_data; 

public CustomAdapter(Context context, List<Research> my_data) { 
    this.context = context; 
    this.my_data = my_data; 
    this.my_data = new ArrayList<Research>(); 
} 

@Override 
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.card, viewGroup, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(CustomAdapter.ViewHolder holder, int position) { 

    holder.title.setText(my_data.get(position).getTitle()); 
    holder.author.setText(my_data.get(position).getAuthor()); 
    holder.year.setText(my_data.get(position).getYear()); 
} 

@Override 
public int getItemCount() { 
    return my_data.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public TextView title, author, year; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.title); 
     author = (TextView) itemView.findViewById(R.id.author); 
     year = (TextView) itemView.findViewById(R.id.year); 

     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(context, ViewFiles.class); 

     Bundle extras = new Bundle(); 
     extras.putInt("position", getAdapterPosition()); 
     intent.putExtras(extras); 

     /* 
     int i=getAdapterPosition(); 
     intent.putExtra("position", getAdapterPosition());*/ 
     context.startActivity(intent); 
     Toast.makeText(CustomAdapter.context, "you have clicked Row " + getAdapterPosition(), Toast.LENGTH_LONG).show(); 
    } 
    } 
} 

ViewFiles.java

public class ViewFiles extends AppCompatActivity { 

RecyclerView recyclerView; 
RecyclerView.LayoutManager layoutManager; 
RecyclerView.Adapter adapter; 
List<Research> data_list; 
DbHelper db; 
Session session; 


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

    session = new Session(this); 
    if (!session.loggedin()) { 
     session.setLoggedin(false); 
     startActivity(new Intent(ViewFiles.this, Login.class)); 

     db = new DbHelper(this); 
     data_list = new ArrayList<Research>(); 
     data_list = db.getAllResearch(); 


     recyclerView = (RecyclerView) findViewById(R.id.recycler_view1); 
     recyclerView.setHasFixedSize(true); 


     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 

     adapter = new CustomAdapter(this, data_list); 
     recyclerView.setAdapter(adapter); 
    } 
} 
} 

это ошибка LogCat.

E/RecyclerView: No adapter attached; skipping layout 
E/Surface: getSlotFromBufferLocked: unknown buffer: 0xee934ca0 

Надеюсь, вы можете мне помочь? спасибо :) this is the logcat error image

+2

Возможно обыкновение исправить проблему, но почему вы настройки ' this.my_data = new ArrayList (); 'в вашем конструктор? – Isaac

+0

Я все еще новичок в программировании, поэтому я ищу возможное решение. одно из массива add add, поэтому я подумал, что его нужно добавить. даже если я удалю массив, проблема не будет исправлена. –

ответ

0

udpate ваш CustomAdapter.java конструктор

От

public CustomAdapter(Context context, List<Research> my_data) { 
this.context = context; 
this.my_data = my_data; 
this.my_data = new ArrayList<Research>(); 
} 

Для

public CustomAdapter(Context context, List<Research> my_data) { 
    this.context = context; 
    this.my_data = my_data; 
} 
+0

Я уже делаю это, но проблема все равно остается прежней. –

+0

Можете ли вы выслать мне более подробную информацию об этом? –

+0

, когда я запускаю приведенный выше код без списка массивов, logcat по-прежнему показывает ту же ошибку. он говорит, что «ни один адаптер не прилагается, пропуская макет» –