Autore Topic: Picasso non carica immagini nella gridView, schermata vuota  (Letto 325 volte)

Offline giupardeb

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Glaxy Note 4
Picasso non carica immagini nella gridView, schermata vuota
« il: 15 Agosto 2015, 20:11:33 CEST »
0
Buongiorno ragazzi, ho un problema nel caricamento di una GridView attraverso la libreria Picasso. L'uso di questa libreria è obbligato per migliorare lo scrolling della GridView. Ma passiamo al problema. In pratica nel momento in cui apro l'activity dove dovrebbero essere visualizzate le immagini con la gridVIew, mi appare una schermata vuota. Ecco il codice:

GridViewGalleryActivity la griglia di immagini verrà visualizzata qua:

Codice: [Seleziona]
public class GridViewGalleryActivity extends Activity {

    private Utils utils;
    private ArrayList<String> imagePaths = new ArrayList<String>();
    private GridViewImageAdapter adapter;
    private GridView gridView;
    private int columnWidth;


    //TODO: 1. CERCARE DI TROVARE SOLUZIONE A PICASSO
    //TODO: 2. FARE IN MODO CHE QUANDO MODIFICO UN FILE, SI SCELGANO I TAG PREDEFINITI, E LE LOCALITÀ REGISTRATE.
    //TODO: 3. CERCARE DI FAR RICARICARE AUTOMATICAMENTE LA GRIDVIUE DOPO LA MODIFICA.

    [MENTION=567222]Override[/MENTION]
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //permette il fullscreen in maniera costante
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_grid_view);

        gridView = (GridView) findViewById(R.id.grid_view);

        utils = new Utils(this);

        // Initilizing Grid View
        InitilizeGridLayout();

        Intent i = getIntent();

        imagePaths = i.getStringArrayListExtra("myArray");

        // Gridview adapter
        adapter = new GridViewImageAdapter(GridViewGalleryActivity.this, columnWidth, imagePaths, this);

        gridView.setOnItemClickListener(OnImageClickListener);
        gridView.setOnItemLongClickListener(OnImageLongClickListener);

        // setting grid view adapter
        gridView.setAdapter(adapter);


    }


    AdapterView.OnItemClickListener OnImageClickListener = new AdapterView.OnItemClickListener() {
        [MENTION=567222]Override[/MENTION]
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent i = new Intent(GridViewGalleryActivity.this, FullScreenViewActivity.class);
            i.putExtra("position", position);
            i.putStringArrayListExtra("myArray", imagePaths);
            GridViewGalleryActivity.this.startActivity(i);
        }
    };

GridViewGalleryActivity

Codice: [Seleziona]
public class GridViewImageAdapter extends BaseAdapter {

    private Activity _activity;
    private ArrayList<String> _filePaths = new ArrayList<String>();
    private int imageWidth;
    private Context _context;

    public GridViewImageAdapter(Activity activity, int imageWidth, ArrayList<String> filePaths, Context context) {

        this._activity = activity;
        this.imageWidth = imageWidth;
        this._filePaths = filePaths;
        this._context = context;
    }

    [MENTION=567222]Override[/MENTION]
    public int getCount() {
        return this._filePaths.size();
    }

    [MENTION=567222]Override[/MENTION]
    public Object getItem(int position) {
        return this._filePaths.get(position);
    }

    [MENTION=567222]Override[/MENTION]
    public long getItemId(int position) {
        return position;
    }

  /*  [MENTION=567222]Override[/MENTION]
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;

        if (convertView == null) {
            imageView = new ImageView(_activity);
        } else {
            imageView = (ImageView) convertView;
        }

        // get screen dimensions
        Bitmap image = decodeFile(_filePaths.get(position), imageWidth,imageWidth);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth));

        imageView.setImageBitmap(image);

        return imageView;
    }*/


    [MENTION=567222]Override[/MENTION]
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
//            check to see if we have a view
        if (convertView == null) {
//                no view - so create a new one
            imageView = new ImageView(_context);
        } else {
//                use the recycled view object
            imageView = (ImageView) convertView;
        }

        Picasso.with(_activity)
                .load(_filePaths.get(position))
                .noFade()
                .centerCrop()
                .into(imageView);
        return imageView;
    }


    /*
     * Resizing image size
     */
    public static Bitmap decodeFile(String filePath, int WIDTH, int HIGHT) {
        try {

            File f = new File(filePath);

            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            final int REQUIRED_WIDTH = WIDTH;
            final int REQUIRED_HIGHT = HIGHT;
            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_WIDTH
                    && o.outHeight / scale / 2 >= REQUIRED_HIGHT)
                scale *= 2;

            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

FullScreenViewActivity

Codice: [Seleziona]
public class FullScreenViewActivity extends Activity {

    private Utils utils;
    private FullScreenImageAdapter adapter;
    private ViewPager viewPager;

    [MENTION=567222]Override[/MENTION]
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_fullscreen_view);

        viewPager = (ViewPager) findViewById(R.id.pager);

        Button btnBack = (Button)findViewById(R.id.btn_back);
        btnBack.setOnClickListener(new View.OnClickListener() {
            [MENTION=567222]Override[/MENTION]
            public void onClick(View v) {
                finish();
            }
        });
        utils = new Utils(getApplicationContext());

        Intent i = getIntent();
        int position = i.getIntExtra("position",0);
        ArrayList<String> imagePath = i.getStringArrayListExtra("myArray");

        //TODO CONTROLLARE LA CLASSE FullScreenImageAdapter. CAUSA NULLPOINTIEXCEPTION

        adapter = new FullScreenImageAdapter(FullScreenViewActivity.this,imagePath);

        viewPager.setAdapter(adapter);

        // displaying selected image first
        viewPager.setCurrentItem(position);
    }
}

FullScreenImageAdapter

Codice: [Seleziona]
public class FullScreenImageAdapter extends PagerAdapter {

    private Activity _activity;
    private ArrayList<String> _imagePaths;
    private LayoutInflater inflater;

    // constructor
    public FullScreenImageAdapter(Activity activity,
                                  ArrayList<String> imagePaths) {
        this._activity = activity;
        this._imagePaths = imagePaths;
    }

    [MENTION=567222]Override[/MENTION]
    public int getCount() {
        return this._imagePaths.size();
    }

    [MENTION=567222]Override[/MENTION]
    public boolean isViewFromObject(View view, Object object) {
        return view == ((RelativeLayout) object);
    }

    [MENTION=567222]Override[/MENTION]
    public Object instantiateItem(ViewGroup container, int position) {
        TouchImageView imgDisplay;
        Button btnClose;

        inflater = (LayoutInflater) _activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,
                false);

        imgDisplay = (TouchImageView) viewLayout.findViewById(R.id.imgDisplay);

      //  BitmapFactory.Options options = new BitmapFactory.Options();
      //  options.inPreferredConfig = Bitmap.Config.ARGB_8888;
      //  Bitmap bitmap = BitmapFactory.decodeFile(_imagePaths.get(position), options);

      //  imgDisplay.setImageBitmap(bitmap);

        if (position != -1) {
            Picasso.with(_activity)
                    .load(_imagePaths.get(position))
                    .noFade()
                    .centerCrop()
                    .into(imgDisplay);
        } else {
            Picasso.with(_activity)
                    .load(R.raw.big_problem)
                    .noFade()
                    .centerCrop()
                    .into(imgDisplay);
        }

        ((ViewPager) container).addView(viewLayout);

        return viewLayout;
    }

    [MENTION=567222]Override[/MENTION]
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((RelativeLayout) object);

    }
}

COme già ribadito più volte sia nel titolo che all'inizio della discussione, le immagini non vengono caricate e mi si apre una schermata vuota. Come posso risolvere? Spero di essere stato chiaro. BUon ferragosto a tutti :)

Post unito: [time]15 Agosto 2015, 20:42:30 CEST[/time]
Ragazzi, fortunatamente sono riuscito a risolvere il problema del caricamento, semplicemente estraendo il path dell'immagine da caricare, creare un oggetto File con il path estratto prima, e passare questo oggetto File come parametro del metodo load.
« Ultima modifica: 16 Agosto 2015, 08:48:38 CEST da giupardeb, Reason: Merged DoublePost »

Offline giupardeb

  • Utente junior
  • **
  • Post: 115
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Glaxy Note 4
Re:Picasso non carica immagini nella gridView, schermata vuota
« Risposta #1 il: 15 Agosto 2015, 20:49:11 CEST »
0
Ecco uno screenshot che spero possa essere chiarificatore