我正在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权限
有什么建议吗?
答案 0 :(得分:2)
检查您的代码后。我已经对您的问题进行了演示。因此,我附上截图和所有细节,包括解决方案,以更好地分析您的问题并解决它。
首先。 **在Picasso **中,它表示服务器出错。 在日志中,您可以看到。
我通过更好的记录来挖掘你的问题......
这是我从滑翔库中得到的信息......
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
使用该代码,您可以看到毕加索的日志。