GridVIew + Picasso + SQLite тормозит загрузка изображений

105
30 сентября 2019, 15:50

При скроллинге GridView в нем картинки долго догружается (это касается прокрутки вверх и вниз), я использую асинхроную загрузку где получаю Integr ссылки на картинки и заношу их в ArrayList после всех манипуляций с потоком я в конце вызываю адаптер и передаю ArrayList в качестве аргумента. В адаптере я создаю ViewHolder в котором есть только одно изображение, получаю ссылку на него и заполняю с помощью Picasso.

Для наглядности вот гифка https://psv4.userapi.com/c848428/u71582166/docs/d7/1442578ff25e/20190210_230821.gif?extra=f7gnB6LLjdzKinhy4SrFWh4hVxHPlXu8mbMJWpPMOaviBYv_CraDd93S-K_I_D5CbVg3gW9eRFDjUSvRkk-6epeAAZOop3DbMLP4X3ZWR9ba8WvkT28UfYXJlQ1Wuo7KR-uEE63Ylqb1Mpy028W9smfu

MainActivity

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GlobalStatic.setContext(this);
    GlobalStatic.setFromBD("Item");
    GlobalStatic.setNumColumns(3);
    GlobalStatic.setRootView(getWindow().getDecorView().getRootView());
    AsyncTaskReadItemsDB asyncTaskReadItemsDB = new AsyncTaskReadItemsDB();
    asyncTaskReadItemsDB.execute();
}

}

ImageAdapter

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<Integer> mData;

    public ImageAdapter(Context c, ArrayList<Integer> data) {
        mContext = c;
        this.mData = data;
        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    public int getCount() {
        return mData.size();
    }
    public Object getItem(int position) {
        return mData.get(position);
    }
    public long getItemId(int position) {
        return position;
    }
    LayoutInflater mInflater;
    static class ViewHolder {
        ImageView iconImageView;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.item_item, null);
            holder = new ViewHolder();
            holder.iconImageView = convertView.findViewById(R.id.imageView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        //holder.iconImageView.setImageResource(mData.get(position));
        Log.e("App","Картинка" + position);
              Picasso.get().load(mData.get(position)).placeholder(R.drawable.nocat).error(R.drawable.nocat).into(holder.iconImageView);
        return convertView;
    }
}

AsyncTaskReadItemsDB

public class AsyncTaskReadItemsDB extends AsyncTask<Void,  Void, ArrayList<Integer>> {
    private SQLiteDatabase mDb;
    private ImageAdapter adapter;
    private Context myContext;
    private View rootView;
    private String FromBD;
    private String WhereBD;
    private String LikeBD;
    private Integer NumColumns;
    @Override
    protected void onPreExecute() {
        myContext = GlobalStatic.getContext();
        LikeBD = GlobalStatic.getLikeBD();
        FromBD = GlobalStatic.getFromBD();
        WhereBD = GlobalStatic.getWhereBD();
        NumColumns = GlobalStatic.getNumColumns();
        rootView = GlobalStatic.getRootView();
        DatabaseHelper mDBHelper = new DatabaseHelper(myContext);
        try {
            mDBHelper.updateDataBase();
        } catch (IOException mIOException) {
            throw new Error("UnableToUpdateDatabase");
        }
        try {
            mDb = mDBHelper.getWritableDatabase();
        } catch (SQLException mSQLException) {
            throw mSQLException;
        }
        super.onPreExecute();
    }
    @Override
    protected ArrayList<Integer> doInBackground(Void... params) {
        ArrayList<Integer> data = new ArrayList<>();
        Cursor cursor = mDb.rawQuery("SELECT * FROM " + FromBD + "", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            data.add(myContext.getResources().getIdentifier(cursor.getString(0), "drawable", myContext.getPackageName()));
            cursor.moveToNext();
        }
        cursor.close();
        return data;
    }
    @Override
    protected void onPostExecute(ArrayList<Integer> result) {
        GridView gridview = rootView.findViewById(R.id.gridview);
        gridview.setNumColumns(NumColumns);
        adapter = new ImageAdapter(myContext,  result);
        gridview.setAdapter(adapter);
        gridview.setOnItemClickListener(gridViewOnItemClickListener);
        super.onPostExecute(result);
    }
    private GridView.OnItemClickListener gridViewOnItemClickListener = new GridView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Intent intent = new Intent(myContext, MainActivity.class);
            intent.putExtra("item name", String.valueOf(adapter.getItem(position)));
            myContext.startActivity(intent);
        }
    };
}
READ ALSO
Не читает данные из SharedPreferences

Не читает данные из SharedPreferences

Всем привет,есть приложение с авторизацией в ВК,сохраняю данные в SharedPreferences при логине,и на второй активити пытаюсь их поймать:

132
Как решить ошибку &ldquo;Error inflating class android.support.design.widget.NavigationView&rdquo;

Как решить ошибку “Error inflating class android.support.design.widget.NavigationView”

Я хочу связать BottomNagation и NagationViewНо "Run" выдает следующее

112
Нужна помощь с Stream java [закрыт]

Нужна помощь с Stream java [закрыт]

Создать программу, в которой выводятся все положительные целые числа, сумма цифр которых равна заданному значениюИспользовать потоки данных

116
NullPointerException в GLSurfaceView в методе onResume

NullPointerException в GLSurfaceView в методе onResume

Ошибку обнаружил в Гугл Плее, на устройтве или в эмуляторе у меня всё работает отличноВот что пишется в гугл плее

132