Java 使用哈希映射从url获取图像,不需要';我不能展示它们
这里是android应用程序开发的初学者,我正在制作一个游戏新闻应用程序,在recycler视图网格中显示大量游戏(项目)。 除了url中的图像外,所有内容都显示正确。 以下是我的一些代码: SecondActivity.javaJava 使用哈希映射从url获取图像,不需要';我不能展示它们,java,android,Java,Android,这里是android应用程序开发的初学者,我正在制作一个游戏新闻应用程序,在recycler视图网格中显示大量游戏(项目)。 除了url中的图像外,所有内容都显示正确。 以下是我的一些代码: SecondActivity.java public class SecondActivity extends AppCompatActivity { public ArrayList<HashMap<String, String>> mDataSource; protected
public class SecondActivity extends AppCompatActivity {
public ArrayList<HashMap<String, String>> mDataSource;
protected RecyclerView mRecyclerView;
protected RecyclerView.LayoutManager mLayoutManager;
protected HomeItemAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initDataset();
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mLayoutManager = new GridLayoutManager(this, 3);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new HomeItemAdapter(this, mDataSource);
mRecyclerView.setAdapter(mAdapter);
}
private void initDataset() {
mDataSource = new ArrayList();
HashMap<String, String> h1 = new HashMap();
h1.put("name", "Super Meat Boy");
h1.put("city", "Indie");
h1.put("image_url","https://66.media.tumblr.com/tumblr_ldi4d79gyD1qd9jlto1_500.jpg");
mDataSource.add(h1);
公共类SecondActivity扩展了AppCompatActivity{
公共ArrayList mDataSource;
受保护的回收视图mRecyclerView;
受保护的RecyclerView.LayoutManager mLayoutManager;
受保护的HomeItemAdapter mAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_秒);
initDataset();
mRecyclerView=(RecyclerView)findViewById(R.id.RecyclerView);
mLayoutManager=新的GridLayoutManager(这个,3);
mRecyclerView.setLayoutManager(mllayoutmanager);
mAdapter=新的HomeItemAdapter(此为mDataSource);
mRecyclerView.setAdapter(mAdapter);
}
私有void initDataset(){
mDataSource=newarraylist();
HashMap h1=新的HashMap();
h1.输入(“姓名”、“超级肉童”);
h1.put(“城市”、“独立”);
h1.put(“图像url”https://66.media.tumblr.com/tumblr_ldi4d79gyD1qd9jlto1_500.jpg");
mDataSource.add(h1);
HomeItemAdapter.java
public class HomeItemAdapter extends RecyclerView.Adapter<HomeItemAdapter.ViewHolder> {
private static final String TAG = "NTR-HomeItemAdapter";
public ArrayList<HashMap<String, String>> mDataSource;
private Context mContext;
public HomeItemAdapter(Context context, ArrayList<HashMap<String, String>> mDataSource) {
this.mDataSource = mDataSource;
this.mContext = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_home_item, viewGroup, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, int position) {
Target target;
Log.d(TAG, "Element " + position + " set.");
viewHolder.getName().setText(mDataSource.get(position).get("name"));
viewHolder.getCity().setText(mDataSource.get(position).get("city"));
//Get Marquee
viewHolder.getName().setSingleLine();
viewHolder.getName().setEllipsize(TextUtils.TruncateAt.MARQUEE);
viewHolder.getName().setHorizontallyScrolling(true);
viewHolder.getName().setFocusableInTouchMode(true);
viewHolder.getName().setSelected(true);
viewHolder.getName().setMarqueeRepeatLimit(-1);
viewHolder.getCity().setSingleLine();
viewHolder.getCity().setEllipsize(TextUtils.TruncateAt.MARQUEE);
viewHolder.getCity().setHorizontallyScrolling(true);
viewHolder.getCity().setFocusableInTouchMode(true);
viewHolder.getCity().setSelected(true);
viewHolder.getCity().setMarqueeRepeatLimit(-1);
// Get Dynamic Color
target = new com.squareup.picasso.Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
if (palette !=null) {
viewHolder.getImageCover().setImageBitmap(bitmap);
Palette.Swatch vibrant = palette.getVibrantSwatch();
if(vibrant!=null) {
viewHolder.getCardItemHome().setBackgroundColor(vibrant.getRgb());
viewHolder.getName().setTextColor(vibrant.getTitleTextColor());
viewHolder.getCity().setTextColor(vibrant.getTitleTextColor());
}
}
}
});
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
viewHolder.getImageCover().setImageResource(R.drawable.cover);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Log.d(TAG,mDataSource.get(position).get("image_url"));
Picasso.with(mContext)
.load(mDataSource.get(position).get("image_url"))
.into(target);
}
@Override
public int getItemCount() {
return mDataSource.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final CardView cardItemHome;
private final ImageView imgCover;
private final TextView txtName;
private final TextView txtCity;
public ViewHolder(View v) {
super(v);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Element " + getPosition() + " clicked.");
}
});
cardItemHome = (CardView) v.findViewById(R.id.card_item_home);
txtName = (TextView) v.findViewById(R.id.txt_name);
txtCity = (TextView) v.findViewById(R.id.txt_city);
imgCover = (ImageView) v.findViewById(R.id.img_cover);
}
public CardView getCardItemHome() {
return cardItemHome;
}
public TextView getName() {
return txtName;
}
public TextView getCity() {
return txtCity;
}
public ImageView getImageCover() {
return imgCover;
}
}
公共类HomeItemAdapter扩展了RecyclerView.Adapter{
私有静态最终字符串TAG=“NTR HomeItemAdapter”;
公共ArrayList mDataSource;
私有上下文;
公共HomeItemAdapter(上下文,ArrayList mDataSource){
this.mDataSource=mDataSource;
this.mContext=上下文;
}
@凌驾
公共视图持有者onCreateViewHolder(视图组视图组,int i){
视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.row\u home\u项目,视图组,false);
返回新的视图持有者(v);
}
@凌驾
public void onBindViewHolder(最终ViewHolder ViewHolder,int位置){
目标;
Log.d(标签,“元素”+位置+“设置”);
viewHolder.getName().setText(mDataSource.get(position.get(“name”));
viewHolder.getCity().setText(mDataSource.get(position.get(“city”));
//获取字幕
viewHolder.getName().setSingleLine();
viewHolder.getName().setEllipsize(TextUtils.TruncateAt.MARQUEE);
viewHolder.getName().setHorizontallyScrolling(true);
viewHolder.getName().setFocusableInTouchMode(true);
viewHolder.getName().setSelected(true);
viewHolder.getName().setMarqueerPeatLimit(-1);
viewHolder.getCity().setSingleLine();
viewHolder.getCity().setEllipsize(TextUtils.TruncateAt.MARQUEE);
viewHolder.getCity().setHorizontallyScrolling(true);
viewHolder.getCity().setFocusableInTouchMode(true);
viewHolder.getCity().setSelected(true);
viewHolder.getCity().setMarqueerPeatLimit(-1);
//获取动态颜色
target=new com.squareup.picasso.target(){
@凌驾
公共无效onBitmapLoaded(最终位图,Picasso.LoadedFrom){
generateAsync(位图,新的Palette.PaletteSyncListener(){
已生成的公共空心板(调色板){
if(调色板!=null){
viewHolder.getImageCover().setImageBitmap(位图);
palete.Swatch vibrant=palete.getVibrantSwatch();
如果(振动!=null){
viewHolder.getCardItemHome().setBackgroundColor(vibrant.getRgb());
viewHolder.getName().setTextColor(vibrant.getTitleTextColor());
viewHolder.getCity().setTextColor(vibrant.getTitleTextColor());
}
}
}
});
}
@凌驾
公共无效onBitmapFailed(Drawable errorDrawable){
viewHolder.getImageCover().setImageResource(R.drawable.cover);
}
@凌驾
准备加载时的公共无效(可提取占位符可提取){
}
};
Log.d(TAG,mDataSource.get(position.get(“image_url”));
毕加索(McContext)
.load(mDataSource.get(position.get(“image\u url”))
.进入(目标);
}
@凌驾
public int getItemCount(){
返回mDataSource.size();
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
私人最终CardView cardItemHome;
私人最终图像视图imgCover;
私有最终文本视图txtName;
私人最终文本视图txtCity;
公共视图持有者(视图v){
超级(五);
v、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
d(标记“Element”+getPosition()+“clicked”);
}
});
cardItemHome=(CardView)v.findViewById(R.id.card\u item\u home);
txtName=(TextView)v.findviewbyd(R.id.txt_name);
txtCity=(TextView)v.findViewById(R.id.txt_city);
imgCover=(ImageView)v.findViewById(R.id.img_封面);
}
public CardView getCardItemHome(){
回家;
}
公共文本视图getName(){
返回txtName;
}
公共文本视图getCity(){
返回txtCity;
}
公共图像视图getImageCover(){
返回imgCover;
}
}
}您的日志显示的图像URL是否正确?@Theo是的,它是正确的。我还设置了internet权限。目标是否为ImageView?我现在正在查看毕加索。它看起来非常简单。@Theo非常奇怪,当我尝试时,我只知道我的回收器视图中的一个项目显示了一个图像,下次尝试时,它就不见了。不,我但是你的日志显示了正确的图像URL吗?@Theo是的,它是正确的。我也有上网权限。目标是图像视图吗?我现在要看毕加索。它看起来很简单。@Theo真的很奇怪,当我尝试它时,我只知道我的回收器视图中的一个项目显示了一个图像,而下一个项目显示了一个图像我试过了,它不见了。但在其他项目的图片上没有运气。