Can't load image from my local server on Andro

2019-08-22 03:07发布

问题:

I am trying to load an image from a server to show it in an ImageView

I used

    ImageView imgView = (ImageView) findViewById(R.id.ivProduct);

    Bitmap bitmap = null;

    try {

        URL urlImage = new URL(
                "http://www.google.fr/intl/en_com/images/srpr/logo1w.png");
        HttpURLConnection connection = (HttpURLConnection) urlImage
                .openConnection();
        InputStream inputStream = connection.getInputStream();
        bitmap = BitmapFactory.decodeStream(inputStream);
        imgView.setImageBitmap(bitmap);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}`

This worked fine but when I downloaded the same image on my server and I changed the url to

http://localhost:9527/market_helper/img_products/logo1w.png

It did not work. What is the problem ?

回答1:

The problem is that in your url the http://localhost:9527 says it is running on a server on your local machine, but when accessing from your Android the http://localhost refers to the device itself.

If you are on the same network you can try access it by replacing the localhost part with your PC's local IP address (for example 192.168.100.6) You can find out what your IP is by typing ipconfig in the command line.



回答2:

localhost is the loopback adapter on the machine (127.0.0.1) you will probably not be able to use this address from the android app (might work with simulator but I still wouldn't use it).

If you are on the same network, the machine name might work but it depends on what you are using to host the image. If you are using a full blown web server like IIS or something like that you should be good (don't forget to check firewall settings on the server to all incoming connections on the port you use). If you are using something like the VS web server (cassini) then it will not work because it doesn't allow connections from off the box.

If you are not on the same network (like the phone is using cell data) then you will need something publicly addressable (a DNS name or IP that points to your server on the internet). You don't specify what you are using on the server, but there are many hosting solutions out there for free or very cheap that you could use.

Hope this helps!