Java 本地存储的图像不会显示在RecyclerView内的CardView中

Java 本地存储的图像不会显示在RecyclerView内的CardView中,java,android,android-recyclerview,android-cardview,Java,Android,Android Recyclerview,Android Cardview,我有一个RecyclerView,它的列表项是cardwiew。cardwiew只有两个TextView和一个ImageView <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="70dp" android:la

我有一个
RecyclerView
,它的列表项是
cardwiew
cardwiew
只有两个
TextView
和一个
ImageView

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"
    android:id="@+id/dcCardView">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/detail_coast_cardview_bg">

        <ImageView
            android:id="@+id/dcImage"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginStart="8dp"
            android:src="@drawable/radiation"
            android:layout_gravity="center_vertical" />

        <LinearLayout
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        <TextView
            android:id="@+id/dcName"
            android:textColor="#fff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="212"
            android:textSize="18dp" />

        <TextView
            android:textColor="#fff"
            android:id="@+id/dcValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="renu asdasasd"
            android:textSize="18dp" />

        </LinearLayout>
    </LinearLayout>
</android.support.v7.widget.CardView>
以及我的
CoastDetailsActivity2

public class CoastDetailsActivity2 extends AppCompatActivity {

    private Context context;
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;
    private int coastId;
    private String jsonCoastDetailsString = "";
    private RecyclerView recyclerView;
    private DetailedCoastAdapter detailedCoastAdapter;
    private ImageView btnBlueFlag;
    private ImageView btnHandycapFriendly;
    private ImageView btnFavorite;
    private ImageView btnWaze;
    private LinearLayout mainLayout;
    private Beach mBeach;

    private TextView tvBeachName;

    private DetailedCoastWithForcast detailedCoastWithForcast;
    private DetailedBeachMetadata detailedBeachMetadata;
    private DetailedBeachHourlyForecast dbhfToday;
    private List<DetailedCoastRecyclerView> detailedCoastRecyclerViewList = new ArrayList<>();
    private Map<String, String> windBearing = new HashMap<>();
    private Map<String, String> jellyType = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coast_details2);

        setPointer();
    }

    private void setPointer() {
        this.context = this;
        mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
        sharedPreferences = context.getSharedPreferences(sharedPreferencesName, MODE_PRIVATE);
        editor = sharedPreferences.edit();
        tvBeachName = (TextView) findViewById(R.id.tvBeachName);

        //start the forecast activity
        tvBeachName.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, ForecastActivity.class);
                intent.putExtra("coastId", coastId);
                startActivity(intent);
            }
        });

        AndroidNetworking.initialize(context);

        //get the coastId
        Bundle extras = getIntent().getExtras();
        if (extras == null) {
            //TODO add snackbar for error
        } else {
            coastId = extras.getInt("coastId");
        }

        getBeachDetails();

        recyclerView = (RecyclerView) findViewById(R.id.dcRecyclerView);
        detailedCoastAdapter = new DetailedCoastAdapter(detailedCoastRecyclerViewList, context);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(detailedCoastAdapter);
    }
}
公共类CoastDetailsActivity2扩展了AppCompativeActivity{
私人语境;
私人共享引用共享引用;
私有共享参考。编辑器;
私人国际海岸ID;
私有字符串JSONCastDetailsString=“”;
私人回收站;
私有详细CoastAdapter详细CoastAdapter;
私有ImageView btnBlueFlag;
私有图像查看btnHandycapFriendly;
私人ImageView btnFavorite;
私有ImageView btnWaze;
私人线路布局主要布局;
私人泳滩;;
私有文本视图tvBeachName;
私人详细海岸带预测详细海岸带预测;
私有DetailedBeachMetadata DetailedBeachMetadata;
今日DBHF预测的私人详细海滩小时数;
private List DetailedCoastRecycleServiceWList=新建ArrayList();
private Map windBearing=新HashMap();
私有映射类型=新HashMap();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u coast\u details2);
setPointer();
}
私有void setPointer(){
this.context=this;
mainLayout=(LinearLayout)findViewById(R.id.mainLayout);
SharedReferences=context.getSharedReferences(SharedReferencesName,MODE_PRIVATE);
editor=SharedReferences.edit();
tvBeachName=(TextView)findViewById(R.id.tvBeachName);
//启动预测活动
tvBeachName.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文,ForecasActivity.class);
意向。额外(“coastId”,coastId);
星触觉(意向);
}
});
初始化(上下文);
//获取海岸ID
Bundle extras=getIntent().getExtras();
如果(附加==null){
//TODO为错误添加snackbar
}否则{
coastId=额外的getInt(“coastId”);
}
getBeachDetails();
recyclerView=(recyclerView)findViewById(R.id.dcRecyclerView);
detailedCoastAdapter=新的detailedCoastAdapter(DetailedCoastRecycleServiceWirList,上下文);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(上下文,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(detailedCoastAdapter);
}
}
适配器呢

public class ForecastAdapter extends RecyclerView.Adapter<ForecastAdapter.myViewHolder> {

    Context context;
    private List<DetailedCoastRecyclerView> dbhf0;

    public ForecastAdapter(Context context, List<DetailedCoastRecyclerView> dbhf0) {
        this.context = context;
        this.dbhf0 = dbhf0;
    }

    @Override
    public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.detailed_coast_card, parent, false);
        return new myViewHolder(view);
    }

    @Override
    public void onBindViewHolder(myViewHolder holder, int position) {
        DetailedCoastRecyclerView dcrv = dbhf0.get(position);
        holder.tvName.setText(dcrv.getName());
        holder.tvValue.setText(dcrv.getValue());
        //holder.ivImage.setImageResource(dcrv.getImageName());
        Glide.with(context).load(dcrv.getImageName()).into(holder.ivImage);
    }

    @Override
    public int getItemCount() {
        return dbhf0.size();
    }

    public class myViewHolder extends RecyclerView.ViewHolder {

        ImageView ivImage;
        TextView tvName;
        TextView tvValue;

        public myViewHolder(View itemView) {
            super(itemView);
            ivImage = (ImageView) itemView.findViewById(R.id.dcImage);
            tvName = (TextView) itemView.findViewById(R.id.dcName);
            tvValue = (TextView) itemView.findViewById(R.id.dcValue);
        }
    }
}
公共类ForecasAdapter扩展了RecyclerView.Adapter{
语境;
私有列表dbhf0;
公共ForecasAdapter(上下文,列表dbhf0){
this.context=上下文;
this.dbhf0=dbhf0;
}
@凌驾
公共myViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=布局更平坦。从(上下文)。充气(R.layout.detailed\u coast\u card,父级,false);
返回新的myViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(myViewHolder,int位置){
DetailedCoastRecyclerViewDCRV=dbhf0.get(位置);
holder.tvName.setText(dcrv.getName());
holder.tvValue.setText(dcrv.getValue());
//holder.ivImage.setImageResource(dcrv.getImageName());
将(dcrv.getImageName())加载到(holder.ivImage)中;
}
@凌驾
public int getItemCount(){
返回dbhf0.size();
}
公共类myViewHolder扩展了RecyclerView.ViewHolder{
图像视图;
文本视图tvName;
文本视图值;
公共myViewHolder(查看项目视图){
超级(项目视图);
ivImage=(ImageView)itemView.findviewbyd(R.id.dcImage);
tvName=(TextView)itemView.findViewById(R.id.dcName);
tvValue=(TextView)itemView.findViewById(R.id.dcValue);
}
}
}
当我运行它时,
getBeachDetails()
方法从服务器获取所有信息,将其添加到
ArrayList
并在适配器上调用
notifyDataSetChanged()

我知道它的工作原理,因为我看到了每张卡的名称和值,但本地存储的图像不会显示

我在一个
ViewPager
中使用了相同的适配器,有3个片段,一切正常


有什么想法吗?

我想你的图像分辨率太高了,android buffer无法处理,在渲染图像时引发异常,所以我知道你在
ImageView
上加载图像时必须降低图像质量

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_marginTop="2dp"
    android:layout_marginBottom="2dp"
    android:id="@+id/dcCardView">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:background="@drawable/detail_coast_cardview_bg">

        <ImageView
            android:id="@+id/dcImage"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_marginStart="8dp"
            android:src="@drawable/radiation"
            android:layout_gravity="center_vertical" />

        <LinearLayout
            android:layout_gravity="center_vertical"
            android:layout_marginStart="16dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

        <TextView
            android:id="@+id/dcName"
            android:textColor="#fff"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="212"
            android:textSize="18dp" />

        <TextView
            android:textColor="#fff"
            android:id="@+id/dcValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="renu asdasasd"
            android:textSize="18dp" />

        </LinearLayout>
    </LinearLayout>
</android.support.v7.widget.CardView>
在毕加索,这是通过调用
resize(width,height)
方法来实现的

Picasso.with(context)
    .load(res)
    .resize(width,height)
    .placeholder(placeHolder)
    .into(view);
我想这和Glide是一样的

  • 您提供了ForecasAdapter的代码,但实际上您使用的是DetailedCoastAdapter。确保它们是否相同
  • 检查dcrv.getImageName()中是否有有效的url/资源

  • 您使用的是DetailedCoastAdapter,但是提供了ForecastAdapter的代码“在带有3个片段的ViewPager中使用相同的适配器”是什么意思?你的碎片上有回收器吗?您是否使用相同的DetailedCoast对象,并且dcrv.getImageName()是否是有效的url/资源名称?没有注意到,在DetailedCoast适配器中没有定义imageView。谢谢,不客气。如果我的回答对你有帮助,你可以接受,并随时向我保证任何细节