【问题标题】:Retrieving Url String From ArrayList从 ArrayList 中检索 Url 字符串
【发布时间】:2016-02-06 20:18:43
【问题描述】:

我在检索成功放入数组列表的 url 字符串时遇到问题。查看调试截图:

如您所见,在使用 Picasso 从 url 加载图像之前,我已成功获取这些 url 字符串。但是,由于某种原因,当我运行该应用程序时,我得到的只是 .error() 可绘制的。我假设 ImageView、Adapter 调用等没有问题,因为我成功获取了可绘制的错误。问题可能与那些字符串网址有关。这是适配器的代码。请注意,除了 setAdapter 方法外,我没有与我的活动中的适配器或图像视图进行任何交互。另外,我在清单文件中拥有 INTERNET 的使用权限。

编辑

我尝试在 .load() 方法中放置一个硬编码的字符串 url,它成功了。所以我想问题出在我试图输入的 url 上,或者是我的 String url 检索代码。还是不确定是哪一个...

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;
    }
}

【问题讨论】:

  • 不清楚你在问什么。删除您的屏幕截图,并将输入添加到问题中

标签: java android arraylist adapter picasso


【解决方案1】:

您正在使用自己的 Url 类,但是...它不会覆盖 toString() 方法,因此使用了 Object 的默认实现,其中:

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,这个方法返回一个字符串等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

因此,毕加索将收到类似以下内容的网址,而不是您的正确网址:

com.onurcevik.mathtest.Math119Adapter$Url@bdde370

这当然不是正确的网址。

一种解决方案是在您的 Url 类中覆盖 toString(),以便使用包含...嗯,url 的 url 变量,例如。 :

@Override
public String toString() {
    return url;
}

您还可以阅读有关 java.net.URL 类的信息,该类可在 Android 上使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2020-03-31
    • 1970-01-01
    • 2013-06-23
    • 2012-10-13
    • 2012-02-13
    • 2016-08-28
    相关资源
    最近更新 更多