Android KITKAT和旧版本的问题

时间:2018-02-14 12:05:02

标签: java android

我正在imageView中查看来自网址的图片,并且该代码可以正常使用android lollipop和较新版本但不能使用Android Kitkat和旧版本,它会返回空白图片而不是网址图片。这是我的代码: HomeActivity.java

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);


    final ImageView imageView = (ImageView) findViewById(R.id.imageView);
    final String url =
            "https://arabian-chemistry.com/wp-content/uploads/2018/01/ما-الذي-يؤخر-العلاج-بتقنية-CRISPR؟.jpg";


    URI I = null;
    try {
        URL u = new URL(url);
        I = new URI(u.getProtocol(), u.getUserInfo(), u.getHost(), u.getPort(), u.getPath(), u.getQuery(), u.getRef());

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    final String urlEncoded = Uri.encode(url, ALLOWED_URI_CHARS);
    final String ui = I.toASCIIString();


    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Picasso.with(HomeActivity.this).load(ui).resize(48, 48).placeholder(R.color.colorPrimaryDark).into(imageView);
            Toast.makeText(HomeActivity.this, "url is: " + ui, Toast.LENGTH_SHORT).show();


        }
    });
}}  

activity_home.xml

   <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
tools:context="com.alpha25.gridview.HomeActivity">



<ImageView
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:id="@+id/imageView"
    />



</RelativeLayout>

我在AndroidManifest文件中包含了Internet权限

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

检查您的代码后。我已经对您的问题进行了演示。因此,我附上截图和所有细节,包括解决方案,以更好地分析您的问题并解决它。

首先。 **在Picasso **中,它表示服务器出错。 在日志中,您可以看到。

enter image description here

我通过更好的记录来挖掘你的问题......

这是我从滑翔库中得到的信息......

W/Glide: Load failed for https://arabian-chemistry.com/wp-content/uploads/2016/07/ptable.png with size [200x200]  class com.bumptech.glide.load.engine.GlideException: Failed to load resource
                                                                     Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, REMOTE
                                                                       Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetch failed
                                                                         Cause (1 of 1): class javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x608e5f90: Failure in SSL library, usually a protocol error
                                                                   error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x5dafe6ed:0x00000000)

从这一行开始。

  

错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3 alert   握手失败(external / openssl / ssl / s23_clnt.c:741   0x5dafe6ed:00000000)

你可以看到它是一个** SSL握手失败**。这个问题只出现API&lt; = 19。因此,您在kitkat设备中遇到此问题。

通过从“启用协议列表”中删除 SSLv3协议,可以解决此问题。你必须创建一个名为 NoSSLv3SocketFactory 的自定义socketFactory类

如何实现这一点,你可以get a reference from this post

因此。在此之后,您的问题将得到解决。不过,如果你遇到任何困难,你可以自由地发表评论。

答案 1 :(得分:0)

试试这个:

autoEnabled=true

使用该代码,您可以看到毕加索的日志。