1

I have a code like this:

public class MainActivity extends AppCompatActivity {
    ImageView img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img = findViewById(R.id.img1);
    }
    public void onClick(View v) {
       new DownloadImageTask((ImageView) findViewById(R.id.img1))
               .execute("http://view:view@178.217.49.11:5022/tmpfs/snap.jpg\"");
    }
    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) {
                e.printStackTrace();
            }
            return mIcon11;
        }
        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }
}

It loads the photo fine from this link: http://92.63.192.191/d/SCP-1017.png, but it doesn't load the photo from here: http://view:view@178.217.49.11:5022/tmpfs/snap.jpg

UPDATE

I realized that I need to use basic auth, but I don't know how to do it.

UPDATE2

I did it! Here's my resulting class:

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 {
            URL url = new URL(urls[0]);
            URLConnection uc = url.openConnection();

            String userpass = USERNAME + ":" + PASSWORD;
            String basicAuth = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
            }

            uc.setRequestProperty ("Authorization", basicAuth);
            InputStream in = uc.getInputStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}  
OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
Mr.AntonDer
  • 113
  • 4

1 Answers1

0
    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 {
                URL url = new URL(urls[0]);
                URLConnection uc = url.openConnection();

                String userpass = USERNAME + ":" + PASSWORD;
                String basicAuth = null;
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                    basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
                }

                uc.setRequestProperty ("Authorization", basicAuth);
                InputStream in = uc.getInputStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return mIcon11;
        }

        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }
Mr.AntonDer
  • 113
  • 4
  • 1
    Do libraries like Glide or Picasso not support authorization headers? https://stackoverflow.com/questions/51149546/how-to-add-authorization-in-header-by-glide-in-android-studio – OneCricketeer Jan 31 '21 at 16:10