मेरे पास एक छवि URL है। मैं इस URL से ImageView में एक छवि प्रदर्शित करना चाहता हूं लेकिन मैं ऐसा करने में असमर्थ हूं।
यह कैसे हासिल किया जा सकता है?
मेरे पास एक छवि URL है। मैं इस URL से ImageView में एक छवि प्रदर्शित करना चाहता हूं लेकिन मैं ऐसा करने में असमर्थ हूं।
यह कैसे हासिल किया जा सकता है?
जवाबों:
URL url = new URL("http://image10.bizrate-images.com/resize?sq=60&uid=2216744464");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);
AsyncTask।
यदि आप एक बटन क्लिक के आधार पर छवि लोड कर रहे हैं, तो ऊपर दिया गया स्वीकृत उत्तर बहुत अच्छा है, हालांकि यदि आप इसे एक नई गतिविधि में कर रहे हैं तो यह UI को एक या दो सेकंड के लिए जमा देता है। चारों ओर देखने पर मैंने पाया कि एक साधारण एसिंक्टस्क ने इस समस्या को समाप्त कर दिया।
अपनी गतिविधि के अंत में इस वर्ग को जोड़ने के लिए एक एसिंक्टस्क का उपयोग करें:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
और अपने onCreate () विधि से कॉल करें:
new DownloadImageTask((ImageView) findViewById(R.id.imageView1))
.execute(MY_URL_STRING);
अपनी मैनिफ़ेस्ट फ़ाइल में नीचे अनुमति जोड़ना न भूलें
<uses-permission android:name="android.permission.INTERNET"/>
मेरे लिए महान काम करता है। :)
picasssoएक बयान में अच्छा और खत्म करने का प्रयास करें
Picasso.with(context)
.load(ImageURL)
.resize(width,height).into(imageView);
ट्यूटोरियल: https://youtu.be/DxRqxsEPc2s
यह जोड़ने का प्रयास करें picasso lib जार फ़ाइल
Picasso.with(context)
.load(ImageURL)
.resize(width,height).noFade().into(imageView);
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
import android.widget.Toast;
public class imageDownload {
Bitmap bmImg;
void downloadfile(String fileurl,ImageView img)
{
URL myfileurl =null;
try
{
myfileurl= new URL(fileurl);
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
try
{
HttpURLConnection conn= (HttpURLConnection)myfileurl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength();
int[] bitmapData =new int[length];
byte[] bitmapData2 =new byte[length];
InputStream is = conn.getInputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
bmImg = BitmapFactory.decodeStream(is,null,options);
img.setImageBitmap(bmImg);
//dialog.dismiss();
}
catch(IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
// Toast.makeText(PhotoRating.this, "Connection Problem. Try Again.", Toast.LENGTH_SHORT).show();
}
}
}
अपनी गतिविधि में इमेजव्यू लें और संसाधन इमेज सेट डाउनलोड करें (url, yourImageview);
UrlImageViewHelper एक URL पर मिलने वाली छवि से एक ImageView भर देगा। UrlImageViewHelper स्वचालित रूप से डाउनलोड करेगा, सहेजेगा, और कैश करेगा सभी छवि BitmapDrawables का आग्रह करता है। डुप्लिकेट url को दो बार मेमोरी में लोड नहीं किया जाएगा। बिटमैप मेमोरी एक कमजोर संदर्भ हैश तालिका का उपयोग करके प्रबंधित की जाती है, इसलिए जैसे ही छवि अब आपके द्वारा उपयोग नहीं की जाती है, यह स्वचालित रूप से एकत्रित कचरा होगा।
UrlImageViewHelper.setUrlDrawable (imageView, "http://example.com/image.png");
इस उत्तर के आधार पर मैं अपना लोडर लिखता हूं।
लोड हो रहा है प्रभाव और प्रकट प्रभाव के साथ:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import java.io.InputStream;
/**
* Created by Sergey Shustikov (pandarium.shustikov@gmail.com) at 2015.
*/
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
public static final int ANIMATION_DURATION = 250;
private final ImageView mDestination, mFakeForError;
private final String mUrl;
private final ProgressBar mProgressBar;
private Animation.AnimationListener mOutAnimationListener = new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation)
{
}
@Override
public void onAnimationEnd(Animation animation)
{
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
};
private Animation.AnimationListener mInAnimationListener = new Animation.AnimationListener()
{
@Override
public void onAnimationStart(Animation animation)
{
if (isBitmapSet)
mDestination.setVisibility(View.VISIBLE);
else
mFakeForError.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation)
{
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
};
private boolean isBitmapSet;
public DownloadImageTask(Context context, ImageView destination, String url)
{
mDestination = destination;
mUrl = url;
ViewGroup parent = (ViewGroup) destination.getParent();
mFakeForError = new ImageView(context);
destination.setVisibility(View.GONE);
FrameLayout layout = new FrameLayout(context);
mProgressBar = new ProgressBar(context);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
mProgressBar.setLayoutParams(params);
FrameLayout.LayoutParams copy = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
copy.gravity = Gravity.CENTER;
copy.width = dpToPx(48);
copy.height = dpToPx(48);
mFakeForError.setLayoutParams(copy);
mFakeForError.setVisibility(View.GONE);
mFakeForError.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
layout.addView(mProgressBar);
layout.addView(mFakeForError);
mProgressBar.setIndeterminate(true);
parent.addView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
protected Bitmap doInBackground(String... urls)
{
String urlDisplay = mUrl;
Bitmap bitmap = null;
try {
InputStream in = new java.net.URL(urlDisplay).openStream();
bitmap = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return bitmap;
}
protected void onPostExecute(Bitmap result)
{
AlphaAnimation in = new AlphaAnimation(0f, 1f);
AlphaAnimation out = new AlphaAnimation(1f, 0f);
in.setDuration(ANIMATION_DURATION * 2);
out.setDuration(ANIMATION_DURATION);
out.setAnimationListener(mOutAnimationListener);
in.setAnimationListener(mInAnimationListener);
in.setStartOffset(ANIMATION_DURATION);
if (result != null) {
mDestination.setImageBitmap(result);
isBitmapSet = true;
mDestination.startAnimation(in);
} else {
mFakeForError.startAnimation(in);
}
mProgressBar.startAnimation(out);
}
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = mDestination.getContext().getResources().getDisplayMetrics();
int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
return px;
}
}
अनुमति जोड़ें
<uses-permission android:name="android.permission.INTERNET"/>
और निष्पादित करें:
new DownloadImageTask(context, imageViewToLoad, urlToImage).execute();
यहां URL से डिस्प्ले इमेज के लिए नमूना कोड दिया गया है।
public static Void downloadfile(String fileurl, ImageView img) {
Bitmap bmImg = null;
URL myfileurl = null;
try {
myfileurl = new URL(fileurl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myfileurl.openConnection();
conn.setDoInput(true);
conn.connect();
int length = conn.getContentLength();
if (length > 0) {
int[] bitmapData = new int[length];
byte[] bitmapData2 = new byte[length];
InputStream is = conn.getInputStream();
bmImg = BitmapFactory.decodeStream(is);
img.setImageBitmap(bmImg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
सर्वश्रेष्ठ विधि मैंने किसी भी पुस्तकालयों का उपयोग करने के बजाय कोशिश की है
public Bitmap getbmpfromURL(String surl){
try {
URL url = new URL(surl);
HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
urlcon.setDoInput(true);
urlcon.connect();
InputStream in = urlcon.getInputStream();
Bitmap mIcon = BitmapFactory.decodeStream(in);
return mIcon;
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
return null;
}
}
प्रकट में इंटरनेट की अनुमति जोड़ें
<uses-permission android:name="android.permission.INTERNET" />
नीचे के रूप में मेथोड बनाने की तुलना में,
public static Bitmap getBitmapFromURL(String src) {
try {
Log.e("src", src);
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
Log.e("Bitmap", "returned");
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
Log.e("Exception", e.getMessage());
return null;
}
}
अब इसे अपने ऑनक्रेट विधि में जोड़ें,
ImageView img_add = (ImageView) findViewById(R.id.img_add);
img_add.setImageBitmap(getBitmapFromURL("http://www.deepanelango.me/wpcontent/uploads/2017/06/noyyal1.jpg"));
यह मेरे लिए काम करता है।
नीचे दिया गया कोड आपको RxAndroid का उपयोग करके एक url स्ट्रिंग से ImageView सेट करने का तरीका दिखाता है। सबसे पहले, RxAndroid लाइब्रेरी 2.0 जोड़ें
dependencies {
// RxAndroid
compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.0'
// Utilities
compile 'org.apache.commons:commons-lang3:3.5'
}
अब छवि सेट करने के लिए setImageFromUrl का उपयोग करें।
public void setImageFromUrl(final ImageView imageView, final String urlString) {
Observable.just(urlString)
.filter(new Predicate<String>() {
@Override public boolean test(String url) throws Exception {
return StringUtils.isNotBlank(url);
}
})
.map(new Function<String, Drawable>() {
@Override public Drawable apply(String s) throws Exception {
URL url = null;
try {
url = new URL(s);
return Drawable.createFromStream((InputStream) url.getContent(), "profile");
} catch (final IOException ex) {
return null;
}
}
})
.filter(new Predicate<Drawable>() {
@Override public boolean test(Drawable drawable) throws Exception {
return drawable != null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Drawable>() {
@Override public void accept(Drawable drawable) throws Exception {
imageView.setImageDrawable(drawable);
}
});
}
दो तरीके है:
1) ग्लाइड लाइब्रेरी का उपयोग करना, यह url से छवि को लोड करने का सबसे अच्छा तरीका है क्योंकि जब आप दूसरी बार में एक ही url प्रदर्शित करने का प्रयास करते हैं तो यह कैच से प्रदर्शित होगा ताकि एप्लिकेशन प्रदर्शन बेहतर हो सके
Glide.with(context).load("YourUrl").into(imageView);
निर्भरता: implementation 'com.github.bumptech.glide:glide:4.10.0'
2) स्ट्रीम का उपयोग करना। यहाँ पर आप url image से bitmap बनाना चाहते हैं
URL url = new URL("YourUrl");
Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bitmap);
loadImage("http://relinjose.com/directory/filename.png");
हेयर यू गो
void loadImage(String image_location) {
URL imageURL = null;
if (image_location != null) {
try {
imageURL = new URL(image_location);
HttpURLConnection connection = (HttpURLConnection) imageURL
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);// Convert to bitmap
ivdpfirst.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
} else {
//set any default
}
}
ivdpfirst?
public class MainActivity extends Activity {
Bitmap b;
ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView)findViewById(R.id.imageView1);
information info = new information();
info.execute("");
}
public class information extends AsyncTask<String, String, String>
{
@Override
protected String doInBackground(String... arg0) {
try
{
URL url = new URL("http://10.119.120.10:80/img.jpg");
InputStream is = new BufferedInputStream(url.openStream());
b = BitmapFactory.decodeStream(is);
} catch(Exception e){}
return null;
}
@Override
protected void onPostExecute(String result) {
img.setImageBitmap(b);
}
}
}
मेरे लिए, फ्रेस्को अन्य पुस्तकालयों में सर्वश्रेष्ठ है।
बस फ्रेस्को सेटअप करें और फिर इमेजरी को इस तरह सेट करें:
draweeView.setImageURI(uri);
की जाँच करें इस जवाब फ्रेस्को के कुछ लाभ बताए गए हैं।