java - android KITKAT 和旧版本的问题

标签 java android

我正在 imageView 中查看来自 url 的图像,该代码适用于 android lollipop 和较新版本,但不适用于 android Kitkat 和旧版本,它返回空白图像而不是 url图片..这是我的代码: 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 文件中包含了互联网权限

有什么建议吗?

最佳答案

检查您的代码后。我已经为你的问题做了一个演示。因此,我附上屏幕截图和所有详细信息,包括解决方案,以便更好地分析您的问题并解决它。

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

enter image description here

我通过更好的日志记录更深入地挖掘了您的问题...

这是我从 glide 库获得的信息...

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)

从这一行开始。

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x5dafe6ed:0x00000000)

您可以看到这是**SSL 握手失败**。此问题仅在 API <=19 时出现。所以您在 Kitkat 设备中遇到了这个问题。

可以通过从启用的协议(protocol)列表中删除SSLv3 协议(protocol)来解决此问题。您必须创建一个名为 NoSSLv3SocketFactory

的自定义 socketFactory 类

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

所以。之后,您的问题将得到解决。不过,如果您遇到任何困难,您可以随意发表评论。

关于java - android KITKAT 和旧版本的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48786834/

相关文章:

java - 使用java获取本地网络的IP地址

android - 如何在 MPAndroidChart 中制作动画?

android - Video.js 搜索在 Android 设备上关闭了大约 5-10 秒

Java:如何创建最终子数组?

java - 如何在 XQuery 中使用或实现数组?

java - 我可以直接从 RecyclerView 获取实体房间数据并将其保存到房间数据库吗?

android opengl深度测试失败

Android Azure 通知中心取消注册

android - 将图像复制到内存

java - 如何在主类的对象上使用扩展类的方法? [JAVA]