Android Studio 는 SQLite 데 이 터 를 어떻게 가 져 와 ListView 에 표시 합 니까?

우 리 는 ListView 를 사용 할 때 데이터 와 연결 해 야 합 니 다.그러면 문제 가 발생 했 습 니 다.SQLite 데이터베이스 에 있 는 데 이 터 를 어떻게 가 져 와 서 ListView 에 동적 으로 표시 합 니까?사실 과정 은 매우 간단 합 니 다.먼저 SQLite 데 이 터 를 가 져 와 야 합 니 다.(물론 SQLite 데이터 베 이 스 를 만 들 고 데 이 터 를 작성 해 야 합 니 다)그리고 ListView 컨트롤 을 도입 하여 마지막 으로 데이터 와 ListView 를 연결 하면 됩 니 다.
SQLite 데이터베이스 의 데이터 가 져 오기
SQLite 는 경량급 데이터 베이스 로 데 이 터 를 휴대 전화 에 저장 할 수 있 지만 소프트웨어 가 마 운 트 해제 되면 모든 데 이 터 를 함께 소각 하 는 것 이 단점 이다.그래서 자신의 프로젝트 에 따라 선택적으로 사용 해 야 한다.SQLite 의 데 이 터 를 추출 하 는 것 을 보 여 드 리 겠 습 니 다.
우선 실례 화 데이터베이스 에 사용 할 클래스 를 정의 합 니 다

public class initdate {
  public Bitmap bitmap;
  public String content;
  public String data;
  public initdate (Bitmap bitmap ,String context,String time){
    this.bitmap =bitmap;
    this.content =context;
    this.data =time;
  }
}
데 이 터 를 저장 하기 위해 List 대상 을 만 듭 니 다.
List list = new ArrayList<>();
SQLite 에 대응 하 는 표 의 데 이 터 를 가 져 옵 니 다.

 DBOpenHelper helper = new DBOpenHelper(getActivity(), "      ", null, 1);//    
    SQLiteDatabase db = helper.getWritableDatabase();
    Cursor c = db.query("  ", null, null, null, null, null, null);
    if (c != null && c.getCount() >= 1) {
      while (c.moveToNext()) {
        list.add(new initdate(base64ToBitmap(c.getString(c.getColumnIndex("   1"))), c.getString(c.getColumnIndex("   2")),
            c.getString(c.getColumnIndex("   3"))));
      }
      c.close();
      db.close();//     
    }
base64ToBitmap 방법 은 String 형식 을 Bitmap 으로 변환 하 는 데 사 용 됩 니 다.

 public static Bitmap base64ToBitmap(String base64info) {
    byte[] bytes = Base64.decode(base64info, Base64.DEFAULT);
    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
  }
2.ListView 컨트롤 도입
ListView 의 도입 은 비교적 간단 합 니 다.우 리 는 ListView 컨트롤 을 xml 파일 에 끌 어 다 놓 으 면 됩 니 다.여 기 는 다만 많이 소개 할 뿐이다

 <ListView
    android:id="@+id/lv_expense"
    style="@style/Animation.AppCompat.DropDownUp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
3.데이터 와 ListView 를 연결 합 니 다.
우선 가 져 온 데 이 터 를 하나의 순환 을 통 해 map 대상 에 저장 합 니 다.

 for (int i = 0; i < list.size(); i++) {
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("image", list.get(i).bitmap);
      map.put("category", list.get(i).content);
      map.put("money", list.get(i).data);
      listitem.add(map);
    }

    SimpleAdapter adapter = new SimpleAdapter(getActivity()
        , listitem
        , R.layout.fragment_one_item
        , new String[]{"category", "money", "image"}
        , new int[]{R.id.tv_expense_category, R.id.tv_expense_money, R.id.image_expense});
   
    ListView listView = (ListView) v.findViewById(R.id.lv_expense);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//     
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Map<String, Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
        Toast.makeText(getActivity(), map.get("category").toString(), Toast.LENGTH_LONG).show();
      }
    });
fragment_one_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">

  <ImageView
    android:id="@+id/image_expense"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    android:adjustViewBounds="true"
    android:maxWidth="72dp"
    android:maxHeight="72dp"/>
  <TextView
    android:id="@+id/tv_expense_category"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:padding="10dp"/>
  <TextView
    android:id="@+id/tv_expense_money"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:text="100yuan"/>
</LinearLayout>
이때 우 리 는 얻 은 데이터 와 ListView 를 연결 시 켰 습 니 다.우 리 는 작은 사진 이 표시 되 지 않 는 것 을 제외 한 다른 정 보 를 정상적으로 표시 할 수 있 습 니 다.이것 은SimpleAdapter어댑터 가 기본적으로 사용 하 는 이미지 자원 이 프로그램 내 로 컬 자원 이기 때문에R.drawableC 를 통 해 얻 을 수 있 습 니 다.데이터베이스 에서 얻 은 Bitmap 형식의 그림 을 ListView 에 표시 하려 면 스스로 실현 해 야 합 니 다ViewBinder()이 연결 구 는 데이터 와 보기 의 일치 관 계 를 정의 합 니 다.

 for (int i = 0; i < list.size(); i++) {
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("image_expense", list.get(i).bitmap);
      map.put("expense_category", list.get(i).content);
      map.put("expense_money", list.get(i).data);
      listitem.add(map);
    }
     SimpleAdapter adapter = new SimpleAdapter(getActivity()
        , listitem
        , R.layout.fragment_one_item
        , new String[]{"expense_category", "expense_money", "image_expense"}
        , new int[]{R.id.tv_expense_category, R.id.tv_expense_money, R.id.image_expense});
    adapter.setViewBinder(new SimpleAdapter.ViewBinder() {

      @Override
      public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
        if ((view instanceof ImageView) & (data instanceof Bitmap)) {
          ImageView iv = (ImageView) view;
          Bitmap bm = (Bitmap) data;
          iv.setImageBitmap(bm);
          return true;
        }
        return false;
      }
    });
    ListView listView = (ListView) v.findViewById(R.id.lv_expense);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//     
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Map<String, Object> map = (Map<String, Object>) parent.getItemAtPosition(position);
        Toast.makeText(getActivity(), map.get("expense_category").toString(), Toast.LENGTH_LONG).show();
      }
    });
이때 사진 자원 도 정상적으로 표 시 될 수 있다.
총결산
안 드 로 이 드 스튜디오 가 SQLite 데 이 터 를 어떻게 얻 고 ListView 에 표시 하 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 스튜디오 SQLite 데이터 ListView 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많이 지 켜 주세요!

좋은 웹페이지 즐겨찾기