问题描述
我正在尝试在 RecyclerView 元素中加载图像:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="20dp"
android:id="@+id/cardview"
android:layout_marginTop="20dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/innerrl"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="20dp"
android:id="@+id/thumbnail"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:layout_marginTop="10dp"
android:id="@+id/name"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/desc"
android:layout_toEndOf="@+id/thumbnail"
android:layout_marginStart="20dp"
android:layout_below="@+id/name"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
</RelativeLayout>
RecyclerView 适配器:
class RecyclerAdapter : RecyclerView.Adapter<RecyclerAdapter.ViewHolder>() {
lateinit var ctx:Context
lateinit var superHeroes:List<SuperHeroe>
fun RecyclerAdapter(listaHeroes:List<SuperHeroe>,ctx:Context){
this.superHeroes=listaHeroes
this.ctx=ctx
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
return ViewHolder(layoutInflater.inflate(R.layout.superhero_layout,parent,false))
}
override fun onBindViewHolder(holder: RecyclerAdapter.ViewHolder,position: Int) {
val item = superHeroes.get(position)
holder.bind(item,ctx)
}
override fun getItemCount(): Int {
return superHeroes.size
}
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val superheroname = view.findViewById(R.id.name) as TextView
val desc = view.findViewById(R.id.desc) as TextView
val avatar = view.findViewById(R.id.thumbnail) as ImageView
fun bind(superhero:SuperHeroe,context: Context){
superheroname.text = superhero.nombre
desc.text = superhero.desc
loadUrl(superhero.imagen,avatar,context)
}
fun loadUrl(url: String,target:ImageView,ctx:Context) {
println(url)
Picasso.with(ctx).load(url).into(target)
}
}
}
毕加索的版本是:
implementation 'com.squareup.picasso:picasso:2.5.2'
ImageView 中没有加载任何图像,但我在 loadUrl 函数中添加了一个日志,如果我点击链接,图像会显示在我的浏览器中。其余元素(名称和描述)显示正确。我做错了什么?
谢谢。
解决方法
您是否在清单中定义了互联网权限? 像这样,
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<!-- JS,Popper.js,and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script>
<div class="container">
<div class="row">
<form class="bg-dark col-sm-6 py-3">
<div class="form-group row">
<label for="id" class="col-sm-3 col-md-4 col-form-label text-white">id</label>
<div class="col-sm-9 col-md-8">
<input id="id" name="id" type="text" class="form-control">
</div>
</div>
<div class="form-group row">
<div class="col offset-sm-3 offset-md-4">
<div class="d-flex justify-content-between">
<button type="button" class="btn btn-primary">A</button>
<button type="button" class="btn btn-warning">B</button>
<button type="button" class="btn btn-primary">C</button>
<button type="button" class="btn btn-danger">D</button>
<button type="button" class="btn btn-info">E</button>
</div>
</div>
</div>
<div class="form-group row">
<div class="col offset-sm-3 offset-md-4">
<div class="d-flex justify-content-between vertical-mobile">
<button type="button" class="btn btn-primary">A</button>
<button type="button" class="btn btn-warning">B</button>
<button type="button" class="btn btn-primary">C</button>
<button type="button" class="btn btn-danger">D</button>
<button type="button" class="btn btn-info">E</button>
</div>
</div>
</div>
<div class="form-group row">
<div class="col offset-sm-3 offset-md-4">
<div class="btn-group custom-btn-group">
<button type="button" class="btn btn-primary">A</button>
<button type="button" class="btn btn-warning">B</button>
<button type="button" class="btn btn-primary">C</button>
<button type="button" class="btn btn-danger">D</button>
<button type="button" class="btn btn-info">E</button>
</div>
</div>
</div>
</form>
</div>
</div>
或者也检查网络安全配置:-
- 从 Android 9(API 级别 28)开始,明文支持被禁用 默认情况下。
您可以尝试任何选项
1. 尝试使用“https://”而不是“http://”来访问 URL
2. 创建文件 res/xml/network_security_config.xml -
<uses-permission android:name="android.permission.INTERNET" />
将此文件添加到清单中的应用程序标签下,
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
</domain-config>
</network-security-config>
3. 使用 usesCleartextTraffic
像这样在清单中的应用程序标签下添加这个,
<application
android:networkSecurityConfig="@xml/network_security_config">
</application>