2017-07-28 66 views
-3

美好的一天,我想用適配器獲取我的數據庫數據並將其顯示在我的RecylcerViewer中。但我不知道如何實施它。希望你會指導我如何完成這些任務如何在Android中使用適配器獲取SQLite數據?

我想將這些數據替換爲我的數據庫數據,但我不知道該怎麼做。

//I want to replace this dummy data to my database data 
    MyAdapter adapter = new MyAdapter(new String[]{"Dummy Data1", "Dummy Data2"}); 

AccntFragment.java

public class AccountsFragment extends Fragment { 

    public AccountsFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_accounts, container, false); 

     RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view); 
     rv.setHasFixedSize(true); 

     //I want to replace this dummy data to my database data 
     MyAdapter adapter = new MyAdapter(new String[]{"Dummy Data1", "Dummy Data2"}); 
     rv.setAdapter(adapter); 

     LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
     rv.setLayoutManager(llm); 

     return rootView; 
    } 
} 

MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
    private String[] mDataset; 

    // Provide a reference to the views for each data item 
    // Complex data items may need more than one view per item, and 
    // you provide access to all the views for a data item in a view holder 
    public static class MyViewHolder extends RecyclerView.ViewHolder { 

     public CardView mCardView; 
     public TextView account_type; 
     public TextView accnt_description; 
     public TextView balance_label; 
     public TextView account_balance; 

     public MyViewHolder(View v) { 
      super(v); 

      mCardView = (CardView) v.findViewById(R.id.card_view); 

      account_type = (TextView) v.findViewById(R.id.lblShareCapital); 
      balance_label = (TextView) v.findViewById(R.id.lblAvailableBalance); 

      accnt_description = (TextView) v.findViewById(R.id.sl_desc); 
      account_balance = (TextView) v.findViewById(R.id.actual_balance); 

     } 
    } 

    // Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(String[] myDataset) { 
     mDataset = myDataset; 
    } 

    // Create new views (invoked by the layout manager) 
    @Override 
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, 
                int viewType) { 
     // create a new view 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.card_item, parent, false); 
     // set the view's size, margins, paddings and layout parameters 
     MyViewHolder vh = new MyViewHolder(v); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, final int position) { 
     holder.account_type.setText(mDataset[position]); 
     holder.mCardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String currentValue = mDataset[position]; 
       Log.d("CardView", "CardView Clicked: " + currentValue); 
      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 

     return mDataset.length; 
    } 
} 

SQliteHandler.java

public void addUser(String br_code, String mem_id, String username, String email, String created_at) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(BR_CODE, br_code); // branch code 
    values.put(MEM_ID, mem_id); // mem id 
    values.put(MEM_USERNAME, username); // username 
    values.put(MEM_EMAIL, email); // Email 
    values.put(MEM_CREATED_AT, created_at); // Created At 

    // Inserting Row 
    long id = db.insertOrThrow(TABLE_MEMBERS, null, values); 

    db.close(); // Closing database connection 

    Log.d(TAG, "Member's info was inserted successfully: " + id); 
    Log.d(TAG, "BR CODE: " + br_code); 
    Log.d(TAG, "Member ID: " + mem_id); 
    Log.d(TAG, "Username: " + username); 
    Log.d(TAG, "Email: " + email); 
    Log.d(TAG, "Created at: " + created_at); 
    Log.d(TAG, "---------------------------------"); 
} 
/** 
* Getting user data from database 
* */ 
public HashMap<String, String> getUserDetails() { 
    HashMap<String, String> user = new HashMap<String, String>(); 
    String selectQuery = "SELECT * FROM " + TABLE_MEMBERS; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // Move to first row 
    cursor.moveToFirst(); 
    if (cursor.getCount() > 0) { 
     user.put("br_code", cursor.getString(0)); 
     user.put("mem_id", cursor.getString(1)); 
     user.put("username", cursor.getString(2)); 
     user.put("email", cursor.getString(3)); 
     user.put("created_at", cursor.getString(4)); 

     Log.d(TAG, "Members's data: " + user.toString()); 
    } 
    else{ 
     Log.d(TAG, "member's data is empty"); 
    } 
    cursor.close(); 
    db.close(); 
    // return user 
    Log.d(TAG, "Member's info was successfully fetch: " + user.toString()); 

    return user; 
} 
/** 
* Storing user SL details in database 
* */ 
public void addUserSLDTL(String sl_desc, String tr_date, String actual_balance, String available_balance){ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(SL_DESC, sl_desc); // sl desc 
    values.put(TR_DATE, tr_date); // trans date 
    values.put(ACTUAL_BALANCE, actual_balance); // actual balance 
    values.put(AVAILABLE_BALANCE, available_balance); // availabe balance 

    // Inserting Row 
    long id = db.insertOrThrow(TABLE_MEMBERS_SLDTL, null, values); 
    db.close(); // Closing database connection 

    Log.d(TAG, "Members's SL Details was successfully: " + id); 
    Log.d(TAG, "SL Desc: " + sl_desc); 
    Log.d(TAG, "Transaction Date: " + tr_date); 
    Log.d(TAG, "Actual Balance: " + actual_balance); 
    Log.d(TAG, "Available Balance: " + available_balance); 
} 
/** 
* Getting user SL details data from database 
* */ 
public HashMap<String, String> getUserSLDTL() { 
    HashMap<String, String> sl_summ = new HashMap<String, String>(); 
    String selectQuery = "SELECT * FROM " + TABLE_MEMBERS_SLDTL; 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // Move to first row 
    cursor.moveToFirst(); 
    if (cursor.getCount() > 0) { 
     sl_summ.put("sl_desc", cursor.getString(0)); 
     sl_summ.put("tr_date", cursor.getString(1)); 
     sl_summ.put("actual_balance", cursor.getString(2)); 
     sl_summ.put("available_balance", cursor.getString(3)); 

     Log.d(TAG, "Member's SL Details: " + sl_summ.toString()); 
    } 
    else{ 
     Log.d(TAG, "member's SLDTL data is empty"); 
    } 
    cursor.close(); 
    db.close(); 

    // return user 
    Log.d(TAG, "Member's SL Details was successfully fetch: " + sl_summ.toString()); 

    return sl_summ; 
} 
+0

你可以閱讀關於數據庫的一些教程嗎? – Piyush

+0

我可以獲取數據先生,但不使用適配器。我需要一個適配器,以便可以使用RecylerViewer在SQLite中顯示所有數據。 – Novice

回答

1

我只是給你一個示例代碼: - 如果您正在使用String [] th你可以將List和ArrayList替換爲String []。 我只是使用列表編寫代碼。

您應該首先獲取數據列表。

public List<HashMap<String, String>> getUserDetails() { 
    HashMap<String, String> user = new HashMap<>(); 
    List<HashMap<String,String>> userList = new ArrayList<>(); 
    // write content values into HashMap 
    // And add hashMap into List 
    // userList.add(user); 

    return userList; 

} 

並做好方法適配器這樣的通知適配器: -

static void setList(List<HashMap> list) { 

    if (list != null && list.size() > 0) { 
     adapterList.addAll(list); 
    } 
    notifyDataSetChanged(); 
} 


List<HashMap<String,String>> userDetailList = getUserDetails(); 

一旦你從數據庫中的數據,那麼你可以調用

adapter.setList(userDetailList) 

注:所有數據庫操作應在後臺線程中做。

+0

我正在使用字符串先生。我應該在哪裏放這個代碼sir public List > getUserDetails(){ HashMap user = new HashMap <>(); List > userList = new ArrayList <>(); //將內容值寫入HashMap //並將hashMap添加到列表中 // userList.add(user); return userList; }? – Novice

0

比方說,你可以創建會員類像

你可以改變成員變量的數據類型,根據自己的需要:

public class member 
    { 
     public int brachCode; 
     public int mem_id; 
     public String username; 
     public String email; 
     public Date crated_at; 

     public int getBrachCode() { 
      return brachCode; 
     } 

     public void setBrachCode(int brachCode) { 
      this.brachCode = brachCode; 
     } 

     public int getMem_id() { 
      return mem_id; 
     } 

     public void setMem_id(int mem_id) { 
      this.mem_id = mem_id; 
     } 

     public String getUsername() { 
      return username; 
     } 

     public void setUsername(String username) { 
      this.username = username; 
     } 

     public String getEmail() { 
      return email; 
     } 

     public void setEmail(String email) { 
      this.email = email; 
     } 

     public Date getCrated_at() { 
      return crated_at; 
     } 

     public void setCrated_at(Date crated_at) { 
      this.crated_at = crated_at; 
     } 
    } 

並如下更改SQliteHandler類的方法...

/** 
* Getting user data from database 
* */ 
public List<Member> getUserDetails() { 

    String selectQuery = "SELECT * FROM " + TABLE_MEMBERS; 
    List<Member> mMemberDetails = new ArrayList<>(); 

    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // Move to first row 
    cursor.moveToFirst(); 
    if (cursor.getCount() > 0) { 

     Member pMemebr = new Member(); 

     pMemebr.setBrachCode(cursor.getString(0)); 
     pMemebr.setMem(cursor.getString(1)); 
     pMemebr.setUsername(cursor.getString(2)); 
     pMemebr.setEmail(cursor.getString(3)); 
     pMemebr.setCrated(cursor.getString(4)); 

     mMemberDetails.add(pMemebr);  
     Log.d(TAG, "Members's data: " + user.toString()); 
    } 
    else{ 
     Log.d(TAG, "member's data is empty"); 
    } 
    cursor.close(); 
    db.close(); 

return mMemberDetails; 

} 
在MyAdapter班組長改變從這個構造

...

private String[] mDataset; 

到這個..

private List<Member> mDataset; 

// Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(String[] myDataset) { 
     mDataset = myDataset; 
    } 

這個...

// Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(List<Member> mMemberDetails) { 
     mDataset = mMemberDetails; 
    } 

和onBindViewHolder()改變這一行:

String currentValue = mDataset[position]; 
       Log.d("CardView", "CardView Clicked: " + currentValue); 

這個...

// Provide a suitable constructor (depends on the kind of dataset) 
    public MyAdapter(List<Member> mMemberDetails) { 
     mDataset = mMemberDetails; 
    } 

就是這樣。它現在會工作。

+0

先生,我可以幫助我解決跟蹤代碼時發生的錯誤嗎?我是新來的這個適配器和Android編程。 – Novice

+0

Sir Android Weblineindia,我跟着你的代碼。但它不起作用。希望你能幫我解決上面的代碼時如何解決錯誤。 – Novice

+0

好的。請檢查您的MyAdapter課程。初始化您的mDataset變量,如下所示:private List mDataset。並在onBindViewHolder()中添加mDataset.get(position).getEmail()。這將工作。 –

相關問題