Loading image from Parse and set in imageView

911 Views Asked by At

I have been able to pull string data from Parse and set it into textviews but I am unable to get an image file and set it in a imageview, I tried using the Byte method but have not been successful and get an error on data.length. heres my code:

public class mygardenDetail extends Activity {

String name;
//String image;
String kgsays;
String care;
String tips;
String image;
Context context;
ImageLoader imageLoader = new ImageLoader(this);
List<ParseObject> ob;
private List<PlantListitems> plantlist = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from singleitemview.xml
    setContentView(R.layout.mygarden_detail);
    //new mygardenDetail.RemoteDataTask().execute();
    imageLoader = new ImageLoader(context);

    Intent i = getIntent();
    // Get the result of rank
    name = i.getStringExtra("name");
    //Get the result of country
    // kgsays = i.getStringExtra("kgsays");
    // Get the result of country
    //care = i.getStringExtra("care");
    // Get the result of population
    //tips = i.getStringExtra("tips");
    // Get the result of flag
    // image = i.getStringExtra("image");


    // Locate the TextViews in singleitemview.xml

    TextView txtName = (TextView) findViewById(R.id.name);
    final TextView txtKGsays = (TextView) findViewById(R.id.KGsays);
    final TextView txtCare = (TextView) findViewById(R.id.Care);
    final TextView txtTips = (TextView) findViewById(R.id.Tips);

    // Locate the ImageView in singleitemview.xml
    final ImageView imgflag = (ImageView) findViewById(R.id.image);
    //Set values in containers
    txtName.setText(name);
    imageLoader.DisplayImage(image, imgflag);

    ParseQuery query = new ParseQuery<>("Plants2");
    query.whereEqualTo("plantName", (name));
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> listCountry, ParseException e) {

            for (ParseObject country : listCountry) {


                // Locate images in flag column
                ParseFile image = (ParseFile) country.get("image");


                //PlantListitems map = new PlantListitems();
                txtKGsays.setText((String) country.get("KGsays"));
                txtCare.setText((String) country.get("Care"));
                txtTips.setText((String) country.get("tips"));
                Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                imgflag.setImageBitmap(bmp);

                //plantlist.add(map);
                //imageLoader.DisplayImage(image, imgflag);
            }
        }


    });
}
}

Code used to display in a list view via intent:

  // RemoteDataTask AsyncTask
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {



    @Override
    protected Void doInBackground(Void... params) {
        // Create the array
        worldpopulationlist = new ArrayList<WorldPopulation>();
        try {
            // Locate the class table named "Country" in Parse.com
            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                    "Plants2");
            // Locate the column named "ranknum" in Parse.com and order list
            // by ascending
            query.orderByAscending("plantName");
            ob = query.find();
            for (ParseObject country : ob) {
                // Locate images in flag column
                ParseFile image = (ParseFile) country.get("image");

                WorldPopulation map = new WorldPopulation();
                map.setName((String) country.get("plantName"));
                map.setType((String) country.get("type"));
                map.setPlot((String) country.get("plotSize"));
                map.setImage(image.getUrl());
                worldpopulationlist.add(map);
            }
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }
2

There are 2 best solutions below

0
Ousmane D. On

This source code seems to work to load an image from a file:

Bitmap bitmap = BitmapFactory.decodeFile(pathToImage);

The Bitmap and BitmapFactory classes are located in the android.graphics package:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

Assuming that your path to the image is correct, you can then add this bitmap image to an ImageView like this:

ImageView imageView = (ImageView) getActivity().findViewById(R.id.imageView);
imageView.setImageBitmap(BitmapFactory.decodeFile(pathToPicture));

credits - http://alvinalexander.com/source-code/android/android-how-load-image-file-and-set-imageview

0
Ravindra Kushwaha On

You can use the Glide library for loading the image from the server like below:-

Gradles entry for the Glide

// For the glide libraray
compile 'com.github.bumptech.glide:glide:3.7.0'

Like this is your Imageview ,you can use the progressbar to show the loading of the image from the server like

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <ProgressBar
            android:id="@+id/YOUR_PROGRESSBAR"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_centerInParent="true"
            />

        <ImageView
            android:id="@+id/YOUR_IMAGEVIEW"
            android:layout_width="match_parent"
            android:layout_height="120dp"
            android:textColor="@android:color/black"
            android:layout_centerInParent="true"
            android:visibility="invisible"
            android:src="@drawable/bubble1" />

    </RelativeLayout>

And in your Activity/Fragment use this lines of code for it

  YOUR_PROGRESSBAR.setVisibility(View.VISIBLE);
 Glide.with(mContext)
                .load("your_server_url")
                .fitCenter()
                .crossFade()
                .listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                        if (e instanceof UnknownHostException)
                            YOUR_PROGRESSBAR.setVisibility(View.GONE);

                        return false;
                    }

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                        YOUR_PROGRESSBAR.setVisibility(View.GONE);
                        YOUR_IMAGEVIEW.setVisibility(View.VISIBLE);
                        return false;
                    }
                }).into(YOUR_IMAGEVIEW);;