图片未加载 - 如何修复?

时间:2018-02-21 13:01:31

标签: java android android-volley

我正在查看来自网址http://arabian-chemistry.com/wp-content/uploads/2018/02/إدارة-التغير.png的图片 这是我获取图像的代码

RequestQueue mQueue = newRequestQueue(context);
    ImageLoader imageLoader = new ImageLoader(mQueue, new ImageLoader.ImageCache() {
        @Override
        public Bitmap getBitmap(String url) {
            return null;
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {

        }
    });
 img.setImageUrl(url, imageLoader);

以上代码在棒棒糖设备上工作正常且更高但是它不会加载到kitkat和旧版本的android上并在日志中出现此错误

02-21 14:49:42.072 28684-29279/com.alpha25.wordpressapp E/Volley: [6654] BasicNetwork.performRequest: Unexpected response code 301 for http://arabian-chemistry.com/wp-content/uploads/2018/02/إدارة-التغير.png

我认为这个问题是因为SSLHandshakeException所以我搜索了一个解决方案,但我不知道如何使用我的代码 这是我找到的代码

SSLContext sslContext = null;
        try {
            sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, null, null);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }

        SSLSocketFactory noSSLv3Factory = null;

        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
            try {
                noSSLv3Factory = new NoSSLv3SocketFactory(sslContext.getSocketFactory());
            } catch (KeyManagementException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        } else {
            noSSLv3Factory = sslContext.getSocketFactory();
        }

        OkHttpClient.Builder okb = new OkHttpClient.Builder()
                .sslSocketFactory(noSSLv3Factory, provideX509TrustManager());
        OkHttpClient ok = okb.build();

请提出任何纠正此事的建议

4 个答案:

答案 0 :(得分:0)

试试这个网址

https://arabian-chemistry.com/wp-content/uploads/2018/02/إدارة-التغير.png

或者如果您不想使用此解决方案,您可以使用滑动或毕加索来加载他们在内部处理此图像的图像。

希望这会对你有所帮助。

答案 1 :(得分:0)

尝试glide这是一个简单的库,用于从互联网上获取图片到您的观点。

使用示例:

// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
  ...
  ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

  GlideApp.with(this).load("http://YOURDOMAIN.COM").into(imageView);
}

// For a simple image list:
@Override public View getView(int position, View recycled, ViewGroup container) {
  final ImageView myImageView;
  if (recycled == null) {
    myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false);
  } else {
    myImageView = (ImageView) recycled;
  }

  String url = myUrls.get(position);

  GlideApp
    .with(myFragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_spinner)
    .into(myImageView);

  return myImageView;
}

答案 2 :(得分:0)

你是否尝试加载没有阿拉伯语后者的图像? 此外301表示服务器正在向您发送,因此您可以指定引用URL和用户代理,欺骗自己作为浏览器

答案 3 :(得分:0)

第一条建议:使用另一个支持followRedirection的库 但是如果你坚持使用Volley在onError函数

上添加波纹管代码
 @Override
public void deliverError(final VolleyError error) {
Log.d(TAG, "deliverError");

final int status = error.networkResponse.statusCode;
// Handle 30x 
if(HttpURLConnection.HTTP_MOVED_PERM == status || status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_SEE_OTHER) {
    final String location = error.networkResponse.headers.get("Location");
    Log.d(TAG, "Location: " + location);
    final GsonRequest<T> request = new GsonRequest<T>(method, location, jsonRequest, this.requestContentType, this.clazz, this.ttl, this.listener, this.errorListener);
    // Construct a request clone and change the url to redirect location.
    RequestManager.getRequestQueue().add(request);
}
}

此代码遵循使用301响应代码重定向的请求。请求