我在检索成功放入arraylist的url字符串时遇到问题。查看调试屏幕截图:
您可以看到,在我使用毕加索从URL加载图像之前,我已经成功获取了这些URL字符串。但是,由于某种原因,当我运行该应用程序时,我得到的只是可绘制的.error()。我假设ImageView,Adapter调用等没有问题,因为我成功获取了可绘制的错误。问题可能出在那些字符串网址上。这是适配器的代码。请注意,除了setAdapter方法之外,我与活动内的适配器和imageview没有任何交互。另外,我在清单文件中具有INTERNET的使用权限。
编辑
我尝试将硬编码的字符串url放入.load()方法内,并且可以正常工作。所以我想问题可能出在我要放入的网址,还是我的String网址检索代码上。仍不确定哪一个...
Math119Adapter:
public class Math119Adapter extends BaseAdapter {
ArrayList<Url> data;
Context context;
public Math119Adapter(Context context) {
this.context = context;
data = new ArrayList<>();
Resources res = context.getResources();
String[] tempUrls = res.getStringArray(R.array.urls);
for (int i = 0; i<tempUrls.length; i++) {
Url tempUrl = new Url(tempUrls[i]);
data.add(tempUrl);
}
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View row = convertView;
if(row == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item_math119, parent, false);
holder = new ViewHolder(row);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
Url url = data.get(position);
Picasso .with(context)
.load(url.toString())
.error(R.drawable.moonlanding)
.fit()
.centerCrop()
.placeholder(R.drawable.placeholder)
.into(holder.myImageView);
holder.myImageView.setTag(url);
return row;
}
}
class ViewHolder {
ImageView myImageView;
ViewHolder(View v) {
myImageView = (ImageView) v.findViewById(R.id.noteImageView);
}
}
class Url {
String url;
Url(String url) {
this.url = url;
}
}
您正在使用自己的Url类,但...不会覆盖toString()方法,因此使用Object的默认实现,其中:
类Object的toString方法返回一个字符串,该字符串包括该对象是其实例的类的名称,符号字符'@'和该对象的哈希码的无符号十六进制表示形式。换句话说,此方法返回一个等于以下值的字符串:
getClass()。getName()+'@'+ Integer.toHexString(hashCode())
因此,不是您的正确网址,毕加索将收到类似以下内容:
com.onurcevik.mathtest.Math119Adapter$Url@bdde370
当然不是正确的URL。
一种解决方案是在您的Url类中重写toString(),以便使用保存... um,url的url变量,例如。 :
@Override
public String toString() {
return url;
}
您可能还会阅读有关java.net.URL类的信息,该类在Android上可用。