【问题标题】:why doesn't it insert image in database为什么不在数据库中插入图像
【发布时间】:2016-07-22 12:09:39
【问题描述】:

我想在我的数据库中插入图像,但图像未插入数据库,但文本已插入数据库。我正在以 JSON 格式从服务器获取数据,但添加了文本,但未在数据库中添加图像

我的代码是:

数据库

public class DataBasehelper extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "MyApp";
private static final String TABLE_TEXTS= "texts";
private static final String TABLE_IMAGES= "images";
private static final String TABLE_SPINNER = "spinners";
private static final String KEY_ID = "_id";
private static final String KEY_NAME = "_name";
private static final String KEY_SPIN = "_spin";
private static final String KEY_URL = "url";

 private static final String CREATE_TABLE_IMAGE = "CREATE TABLE "
    + TABLE_IMAGES
    + " ( "
    + KEY_ID + " INTEGER PRIMARY KEY, "
    + KEY_NAME + " TEXT, "
    + KEY_URL + " TEXT) ";

 public DataBasehelper(Context context) {

    super(context, DB_NAME, null, DB_VERSION);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {

    db.execSQL(CREATE_TABLE_IMAGE);
    Log.e("table name","==>"+CREATE_TABLE_TEXTS);
    Log.e("table name","==>"+CREATE_TABLE_IMAGE);
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      db.execSQL("DROP TABLE IF EXISTS "+TABLE_IMAGES);
     onCreate(db);
 }

 public void addImage(ImgModel model) {
    SQLiteDatabase db = this.getWritableDatabase();
    try{
        ContentValues values = new ContentValues();
        values.put(KEY_NAME, model.getName());
        values.put(KEY_URL, model.getImageUrl());
        db.insert(TABLE_TEXTS, null, values);
        Log.e("this db","value is"+values);
        db.close();
     }catch (Exception e){
        Log.e("problem",e+"");
     }
 }
 public List<ImgModel> getAllImage() {
    SQLiteDatabase db = this.getReadableDatabase();
    List<ImgModel> imageList = null;
    try{
        imageList = new ArrayList<ImgModel>();
        String QUERY = "SELECT * FROM "+TABLE_TEXTS;
        Cursor cursor = db.rawQuery(QUERY, null);
        if(!cursor.isLast())
        {
            while (cursor.moveToNext())
            {
                ImgModel image = new ImgModel();
                image.set_id(cursor.getInt(0));
                image.setName(cursor.getString(1));
                image.setImageUrl(cursor.getString(2));
                imageList.add(image);
            }
        }
        db.close();
     }catch (Exception e){
        Log.e("error",e+"");
     }
     return imageList;
 }

模型类

public class ImgModel {
private int _id;
private String imageUrl;
private String name;

//Getters and Setters
public String getImageUrl() {
    return imageUrl;
}

public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int get_id() {
    return _id;
}

public void set_id(int _id) {
    this._id = _id;
 }
}

活动

检查互联网

  NetworkUtils utils = new NetworkUtils(getApplicationContext());
    if(utils.isConnectingToInternet())
    {
        getSpinnerData();
    }
    else
    {
        List<ImgModel> imageList = db.getAllImage();
        adapter = new ImageAdapter(imageList, this);
        recyclerView.setAdapter(adapter);
    }

在数据库中添加图像

 private void parseData(JSONArray array) {
    for (int i = 0; i < array.length(); i++) {
        ImgModel model1 = new ImgModel();
        JSONObject json = null;
        try {
            json = array.getJSONObject(i);
            String link = json.getString(Config.TAG_IMAGE_URL);
            String imgname = json.getString(Config.TAG_NAME);
            model1.setImageUrl(link);
            model1.setName(imgname);
            db.addImage(model1);    // add data in database
            Log.e("urls","===>"+link);
          } catch (JSONException e) {
            e.printStackTrace();
        }
        listimg.add(model1);
    }

【问题讨论】:

  • 你想上网后访问图片吧?
  • 如果我在线然后从 json 加载图像但是当我不在线时它从数据库访问
  • 您没有将图像存储在数据库中,您只是在保存 url。要从数据库中获取图像,您必须将图像保存在数据库中,因为您必须使用 BLOB 作为数据类型,请尝试参考此tutorial,如果遇到问题,请回复。
  • Rishabh Lashkari 谢谢,但我第一次从 json 中获取图像然后存储在数据库中,本教程不适合那个..
  • 我确实知道如何做到这一点,但是将图像插入数据库是一种非常糟糕的方法,您必须避免这种情况。您也可以使用 Glide 和 Picasso

标签: android json sqlite android-image


【解决方案1】:

使用像 Picasso、Glide 或 Fresco 这样的图片库来为你缓存图片,你只需要存储你现在正在做的 url,它只会下载图片 1 次,之后它会获取图片来自缓存

【讨论】:

  • 我也在使用 volley Imageloader.. 在我的活动中
  • 好吧,如果你愿意,你可以尝试改变库,我推荐 Glide,因为它是最轻的,Picasso 和 glide 是一回事,bt fresco 在图像缓存方面最好,但它有时会出现冻结 UI 的错误,所以我不推荐它使用 BLOB 存储图像不是一个好主意,因为它只会让你的数据库变得沉重
  • github.com/square/picasso 导入库后,您只需使用一行 Picasso.with(this).load(uri).fit().placeholder(drawable).into(imageview);这将做的是它会检查你的图像是否已经存在缓存,如果是,那么它将从缓存中加载图像,否则它将从网络下载它
猜你喜欢
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多