Colin
Colin

Reputation: 4135

Android ImageView From URL: Not Getting Set (Using Picasso)

I'm brand new to Android development, so I'm probably doing something stupid. Any ideas why this code shouldn't work?

It compiles and runs, but doesn't actually successfully set the image (which is previously set to a gray background).

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_activity);
    Button getImageButton = (Button) (findViewById(R.id.btnGetImage));
    getImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ImageView myImageView = (ImageView) (findViewById(R.id.myImageView));
            Picasso.with(v.getContext()).load("https://www.example.com/someimage").into(myImageView);
        }
    });
}

Upvotes: 1

Views: 529

Answers (4)

Yogesh Borhade
Yogesh Borhade

Reputation: 704

step 1 In Menifest check Internet Connection

<uses-permission android:name="android.permission.INTERNET" />

step 2 compile "com.squareup.picasso:picasso:2.4.0"

step 3 Image url is not showing any image in browser paste your url in browser and if you get image then you can set that image to imagview

step 4 check url is working or not there is not .png or .jpg extension for imagfile

@Override

     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my_activity);

            Button getImageButton = (Button) (findViewById(R.id.btnGetImage));

            getImageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {   
   //Initializing the ImageView
    imageView = (ImageView) findViewById(R.id.imageView);

    //Loading Image from URL
    Picasso.with(this)
            .load("https://www.example.com/someimage")
            .placeholder(R.drawable.placeholder)   // optional
            .error(R.drawable.error)      // optional
            .resize(400,400)                        // optional
            .into(imageView);
}
});
}

Upvotes: 1

Charuka Silva
Charuka Silva

Reputation: 13153

Ding ding here is my answer

I am sure that you add the dependency

compile 'com.squareup.picasso:picasso:2.5.2'

and used the right url

Picasso.with(v.getContext()).load("http://i.imgur.com/DvpvklR.png").into(imageView);


I am telling you where you went wrong !!

Magic : Have you added the internet permission ? It needs to be in your manifest

 <uses-permission android:name="android.permission.INTERNET" />

Rather than that your code is just fine

But i recommend you to use getApplicationContext()

copying from my comment

Picasso is a library and not an application. While creating Picasso instance if you'll not pass context, then how do you think it will get the application context from ? For it to work it requires context , and it definitely needs to be provided by the application using this library.It also prevents leaking an Activity (if that's what you pass ,some of below answers have used ) by switching to the application context. use getApplicationContext()

And for the people who randomly put an answer here read this as well

  • View.getContext(): Returns the context the view is currently running in. Usually the currently active Activity.

  • Activity.getApplicationContext(): Returns the context for the entire application (the process all the Activities are running inside of). Use this instead of the current Activity context if you need a context tied to the lifecycle of the entire application, not just the current Activity.

  • ContextWrapper.getBaseContext(): If you need access to a Context from within another context, you use a ContextWrapper. The Context referred to from inside that ContextWrapper is accessed via getBaseContext().

so any way he is accessing the currant activity context.

Cheers!

Upvotes: 1

Mrinmoy
Mrinmoy

Reputation: 1368

alter you code this way

Picasso.with(YOUR_ACTIVITY_NAME.this).load("https://www.example.com/someimage").into(myImageView);

Here v.getContext() is not related to the main context, so it won't help you, we need to pass context of current activity

Upvotes: 1

Sagar Gangawane
Sagar Gangawane

Reputation: 1985

Please try this and let me know.

 @Override
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_activity);
        Button getImageButton = (Button) (findViewById(R.id.btnGetImage));
        ImageView myImageView = (ImageView) (findViewById(R.id.myImageView));
        getImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Picasso.with(YourActivityName.this).load("https://www.example.com/someimage").into(myImageView);
            }
        });
    }

Upvotes: 1

Related Questions