如何通过drawable从sqlite显示图像

时间:2016-06-01 13:15:07

标签: java android database sqlite android-image

我想显示来自列'图像的图像'在' penyakit'来自sqlite数据库的表。该图像通过TabGambar.java显示。

我的朋友告诉我,我可以将图像的地址放在数据库中并将该图像保存为可绘制的。但我不明白它是如何运作的。我曾尝试使用字符串uri drawable但它只能显示一个图像。

以前,我一直在寻找谷歌的参考资料,并找到这么多的教程。但我仍然不知道应该添加或更改哪个部分。有人能解决我的问题吗?

这是我的作品。

TabGambar.java

public class TabGambar extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater
                .inflate(R.layout.tabgambar, container, false);
        configureTextView(view);

        return view;
    }

    private void configureTextView(View view) {
        // TODO Auto-generated method stub

        TextView namapenyakit = (TextView) view.findViewById(R.id.namapenyakit);
        ImageView gambarpenyakit = (ImageView) view.findViewById(R.id.gambarpenyakit);

          Bundle b = getActivity().getIntent().getExtras();
          if (b != null)
          {

              namapenyakit.setText(b.getString("nama_penyakit"));


              String uri = "@drawable/ayam1"; 
              int imageResource = getResources().getIdentifier(uri, null, getActivity().getPackageName());
              Drawable res = getResources().getDrawable(imageResource);
              gambarpenyakit.setImageDrawable(res);

          }
}

}

DBAdapter.java

public class DBAdapter extends SQLiteAssetHelper { 
 //nama database, versi, dan nama tabel yang akan dibuat.
 private static final String DATABASE_NAME = "pakarayam";
 private static final int DATABASE_VERSION = 1;

 private static final String tabel_gejala = "gejala";
 public static final String  kd_gejala  = "kode_gejala";
 public static final String  nm_gejala = "nama_gejala";

 private static final String tabel_penyakit = "penyakit";
 public static final String  kd_penyakit  = "kode_penyakit";
 public static final String  nm_penyakit = "nama_penyakit";
 public static final String  deskripsi = "deskripsi";
 public static final String  solusi = "solusi";
 public static final String  gambar = "gambar";

 private static final String tabel_rule = "rule";
 public static final String  kd_rule  = "kode_rule";
 public static final String  ko_gejala  = "kode_gejala";
 public static final String  ko_penyakit  = "kode_penyakit";
 public static final String  nilai_mb  = "nilai_mb";
 public static final String  nilai_md  = "nilai_md";

 private static DBAdapter dbInstance;
 private static SQLiteDatabase db;

 private DBAdapter(Context context)
 {
  super(context, DATABASE_NAME, null, DATABASE_VERSION);
 }

 public static DBAdapter getInstance(Context context)
 {
  if (dbInstance == null)
  {
   dbInstance = new DBAdapter(context);
   db = dbInstance.getWritableDatabase();
  }
  return dbInstance;
 }

 @Override
 public synchronized void close()
 {
  super.close();
  if (dbInstance != null)
  {
   dbInstance.close();
  }
 }

 public ArrayList<Gejala> getAllGejala()
 {  
  ArrayList<Gejala> listGejala = new ArrayList<Gejala>();

  Cursor cursor = db.query(tabel_gejala, new String[] {kd_gejala, nm_gejala
     }, null, null, null, null, nm_gejala);
  if (cursor.getCount() >= 1)
  {
   cursor.moveToFirst();

   do
   {
    Gejala gejala = new Gejala();
    gejala.setNama_gejala(cursor.getString(cursor
              .getColumnIndexOrThrow(nm_gejala)));
    gejala.setKode_gejala(cursor.getString(cursor
              .getColumnIndexOrThrow(kd_gejala)));


    listGejala.add(gejala);

   } while (cursor.moveToNext());
  }
  return listGejala;

 }  

 public List<Gejala> Search(String Nama_gejala)
 {
  List<Gejala> listGejala = new ArrayList<Gejala>();

  Cursor cursor = db.query(tabel_gejala, new String[] { 
          kd_gejala,
          nm_gejala }, 
          nm_gejala + " like ?", new String[] {"%"+ Nama_gejala +"%"}, null, null, null, null);
  if (cursor.getCount() >= 1)
  {
   cursor.moveToFirst();

   do
   {
       Gejala gejala = new Gejala();
        gejala.setNama_gejala(cursor.getString(cursor
          .getColumnIndexOrThrow(nm_gejala)));


        listGejala.add(gejala);

   } while (cursor.moveToNext());
  }
  return listGejala;

 }

 public List<Penyakit> getAllPenyakit()
 {
  List<Penyakit> listPenyakit = new ArrayList<Penyakit>();

  Cursor cursor = db.query(tabel_penyakit, new String[] {kd_penyakit, nm_penyakit, deskripsi, solusi, gambar
     }, null, null, null, null, nm_penyakit);
  if (cursor.getCount() >= 1)
  {
   cursor.moveToFirst();

   do
   {
    Penyakit penyakit = new Penyakit();
    penyakit.setNama_penyakit(cursor.getString(cursor
      .getColumnIndexOrThrow(nm_penyakit)));
    penyakit.setDeskripsi(cursor.getString(cursor
            .getColumnIndexOrThrow(deskripsi)));
    penyakit.setSolusi(cursor.getString(cursor
            .getColumnIndexOrThrow(solusi)));
    penyakit.setGambar(cursor.getString(cursor
            .getColumnIndexOrThrow(gambar)));


    listPenyakit.add(penyakit);

   } while (cursor.moveToNext());
  }
  return listPenyakit;

 }  

 public List<Penyakit> Searching (String Nama_penyakit)
 {
  List<Penyakit> listPenyakit = new ArrayList<Penyakit>();

  Cursor cursor = db.query(tabel_penyakit, new String[] { 
          kd_penyakit,
          nm_penyakit,
          deskripsi,
          solusi,
          gambar}, 
          nm_penyakit + " like ?", new String[] {"%"+ Nama_penyakit +"%"}, null, null, null, null);
  if (cursor.getCount() >= 1)
  {
   cursor.moveToFirst();

   do
   {
       Penyakit penyakit = new Penyakit();
        penyakit.setNama_penyakit(cursor.getString(cursor
                .getColumnIndexOrThrow(nm_penyakit)));
        penyakit.setDeskripsi(cursor.getString(cursor
                .getColumnIndexOrThrow(deskripsi)));
        penyakit.setSolusi(cursor.getString(cursor
                .getColumnIndexOrThrow(solusi)));
        penyakit.setGambar(cursor.getString(cursor
                .getColumnIndexOrThrow(gambar)));

        listPenyakit.add(penyakit);

   } while (cursor.moveToNext());
  }
  return listPenyakit;

 }

 public double getMB(/*int kode_rule,*/ String kode_gejala)
 {
     /*
  Cursor cursor = db.query(tabel_rule, new String[] 
          {kd_rule, ko_gejala, ko_penyakit, nilai_mb, nilai_md
     },  ko_gejala + " like ?", new String[] {"%"+ kode_gejala +"%"},
     null, null, null, null);

  double mb = 0;
  cursor.moveToFirst();
  mb = cursor.getDouble(cursor.getColumnIndexOrThrow(nilai_mb));
 if (cursor.getCount() >= 1)
  {
   cursor.moveToFirst();

   do
   {
       mb = cursor.getDouble(cursor.getColumnIndexOrThrow(nilai_mb));
   } while (cursor.moveToNext());
  }
*/
      Cursor cursor = db.query(tabel_rule, new String[] {
              kd_rule, 
              ko_gejala, 
              ko_penyakit, 
              nilai_mb, 
              nilai_md
         },   ko_gejala + " = '"+kode_gejala+"'", null, null, null, null, null);

      double mb = 0;

      if(cursor != null){
          cursor.moveToFirst();
          while(!cursor.isAfterLast()){
              mb = cursor.getDouble(3);
          }
      }

  return mb;
 }

 public double getMD(/*int kode_rule,*/ String kode_gejala)
 {
  Cursor cursor = db.query(tabel_rule, new String[] {
          kd_rule, 
          ko_gejala, 
          ko_penyakit, 
          nilai_mb, 
          nilai_md
     },   ko_gejala + " = '"+kode_gejala+"'", null, null, null, null, null);

  double md = 0;
//  cursor.moveToFirst();
//  md = cursor.getDouble(cursor.getColumnIndexOrThrow(nilai_md));
/*  
  if (cursor.getCount() >= 1)
  {
   cursor.moveToFirst();

   do
   {
       md = cursor.getDouble(cursor.getColumnIndexOrThrow(nilai_md));
   } while (cursor.moveToNext());
  }
*/

  if(cursor != null){
      cursor.moveToFirst();
          md = cursor.getDouble(cursor.getColumnIndexOrThrow(nilai_md));
          System.out.print(nilai_md);
  }

  return md;

 }

}

1 个答案:

答案 0 :(得分:0)

我不确定这里的具体细节,但基本上,如果你想在你的数据库中存储图像,你必须将信息存储为字节的'blob'。

当您从DB和位图读取时,您需要在字节和位图之间进行转换,当您想要写入数据库时​​,需要在字节之间进行转换。

URI通常用于来自设备存储的文件或服务器/网站上的某个文件等。

如果这是您正在寻找的,并且您想要更详细的帮助,请告诉我,我可以提供更多信息。