从ArrayList检索Url字符串

时间:2016-02-06 20:18:44

标签: java android arraylist adapter picasso

我在检索我成功添加到我的arraylist中的url字符串时遇到了问题。请参阅调试屏幕截图:

正如您所看到的,在我使用Picasso从url加载图像之前,我已成功获取这些url字符串。但是,由于某些原因,当我运行应用程序时,我得到的只是.error()drawable。我假设ImageView,适配器调用等没有问题,因为我成功地得到了错误drawable。问题可能出在那些字符串网址上。这是适配器的代码。请注意,除了setAdapter方法之外,我没有与适配器或我的活动中的imageview进行任何交互。另外,我在清单文件中拥有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;
    }
}

1 个答案:

答案 0 :(得分:1)

你正在使用自己的Url类,但是它没有覆盖toString()方法,所以使用了Object的默认实现,其中:

  

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

     

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

因此毕加索不会使用你的网页,而是会收到类似的内容:

com.onurcevik.mathtest.Math119Adapter$Url@bdde370

当然这不是一个正确的网址。

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

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

您可能还会阅读有关java.net.URL课程的内容,该内容适用于Android。