【问题标题】:How to get SQLite db values in Arraylist to Listview如何将 Arraylist 中的 SQLite db 值获取到 Listview
【发布时间】:2016-12-23 19:23:11
【问题描述】:

我需要在列表视图中设置适配器值。在其中,我创建了一个 ArrayList 来从 SQLite DB 获取数据,我需要将它传递给一个包含 3 列的 listView。这里我提到了我的代码。

我需要在哪里调用存储在本地 Db 中的数据?

DBHelper.java

 public ArrayList<SQLPojo.UserDetails> getUserDetails() {

    ArrayList<SQLPojo.UserDetails> aUserDetailList = new ArrayList<SQLPojo.UserDetails>();

    try {

      String aQuery = "SELECT * FROM " + TABLE_NAME;

      Cursor aCursor = mySqliteDataBase.rawQuery(aQuery, null);

      aCursor.moveToFirst();
      if(aCursor.getCount() > 0) {
        SQLPojo.UserDetails aUserDetails = myReturnValues.getUserDetailInstance();
        aUserDetails.setId(aCursor.getString(aCursor
                .getColumnIndex("ID")));
        aUserDetails.setUsername(aCursor.getString(aCursor
                .getColumnIndex("USERNAME")));
        aUserDetails.setPlace(aCursor.getString(aCursor
                .getColumnIndex("PLACE")));
        aUserDetailList.add( aUserDetails );
      }
      aCursor.close();
    }
    catch(android.database.SQLException e)
    {
      e.printStackTrace();
    }
    return aUserDetailList;
  }

在这个类中,我将获取所有数据并将其列出到列表视图中。

GetAllValues.java

public class SQLViewAllData extends Activity {

private SQLDbHelper myDbHelper;
private SQLCustomViewAllDataAdapter myAdapter;
private ListView myListView;
private ArrayList<SQLPojo> aList = new ArrayList<>();
private Activity myContext;

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

    widgetInitialization();
    viewAllData();
}
//Initializing Widgets
public void widgetInitialization() {
    myDbHelper = new SQLDbHelper( myContext );
    myListView = (ListView)findViewById( R.id.listview_view_data_LV );
}

public ArrayList<SQLPojo.UserDetails> getUserInfo() {
    return myDbHelper.getUserDetails();
}

//view all data stored in DB
public void viewAllData( ) {
    myAdapter = new SQLCustomViewAllDataAdapter( SQLViewAllData.this,aList);
    myListView.setAdapter( myAdapter );
}}

这是我获取所有值的适配器类 CustomAdapter.java

 public View getView( int aPosition, View aConvertView, ViewGroup aParent ) {

LayoutInflater inflater = myActivity.getLayoutInflater();
ViewHolder aHolder;

if( aConvertView == null ) {
  aConvertView = inflater.inflate( R.layout.layout_inflate_custom_listview_view_data, null );

  aHolder = new ViewHolder();

  aHolder.aTextViewID = ( TextView )aConvertView.findViewById( R.id.custom_listview_view_data_ID );
  aHolder.aTextViewUN = ( TextView )aConvertView.findViewById( R.id.custom_listview_view_data_UN );
  aHolder.aTextViewPLC = ( TextView )aConvertView.findViewById( R.id.custom_listview_view_data_Place );
  aConvertView.setTag( aHolder );
}
else {
  aHolder = (ViewHolder) aConvertView.getTag();
}

aHolder.aTextViewID.setText(myData.get(aPosition).toString());
aHolder.aTextViewUN.setText(myData.get(aPosition).toString());
aHolder.aTextViewPLC.setText(myData.get(aPosition).toString());

return aConvertView;

}

【问题讨论】:

  • 这与您的问题没有直接关系,但是您是否有理由不使用 CursorAdapter 而不是 ArrayAdapter?这将消除创建 ArrayList 的需要:developer.android.com/reference/android/widget/…guides.codepath.com/android/… 应该对此有所帮助。 --- 另外,我不确定 myData 来自哪里,但您需要使用 get 获取 SQLPojo.UserDetails 对象,然后调用正确的 getter 以使用用户名、id、地点填充您的视图等。
  • @Lyla 是绝对正确的:使用SimpleCursorAdapter,不要使用ant ArrayAdapter 如果你的数据是基于Cursor,你会看到你的代码只有5-10 行代码
  • 如果使用光标适配器(简单或自定义)而不是数组适配器,需要注意两点。 1)必须有一个名为 _id 的列(如果需要使用 AS 生成一个,例如 ABS(RANDOM()) AS _ID ),2)确保在完成后关闭光标,例如在活动的onDestroy,
  • @MikeT 0 AS _IDABS(RANDOM()) AS _ID 一样好,它不需要是“伪”唯一的

标签: android listview arraylist android-sqlite


【解决方案1】:

它应该是直截了当的。做吧:

public void viewAllData( ) {
  aList = getUserInfo(); //this is where you call the local database.
  myAdapter = new SQLCustomViewAllDataAdapter( SQLViewAllData.this,aList);
  myListView.setAdapter( myAdapter );
}

另外,确保将 aList 从类型 SQLPojo 更改为 SQLPojo.UserDetails

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多