如何显示本地图像(可绘制的图像文件)通过JSON来cardview。我想在离线加载图像而不是使用毕加索库

问题描述 投票:-3回答:1

如何显示本地图像(可绘制的图像文件),通过cardviewjson。我想在离线加载图像而不是使用毕加索库

我使用的标签布局和我Frament.java

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(
            R.layout.fragment, container, false);
    return rootView;


}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    final ArrayList<Website> babyList = Website.getbabyFromFile("baby&kids.json", getActivity());
    adapter = new WebsiteAdapter(this, babyList);
    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),2));
    recyclerView.setAdapter(adapter);
}

我Website.java是

private String url;
public String imageUrl;

public Website() {
}

public Website(String url)  {
    this.url = url;

}

public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}
public static ArrayList<Website> getbabyFromFile(String filename, Context context) {
    final ArrayList<Website> babyList = new ArrayList<>();

    try {
        // Load data
        String jsonString = loadJsonFromAsset("baby&kids.json", context);
        JSONObject json = new JSONObject(jsonString);
        JSONArray baby = json.getJSONArray("baby&kids");

        // Get Website objects from data
        for(int i = 0; i < baby.length(); i++){
            Website recipe = new Website();

            recipe.setUrl(baby.getJSONObject(i).getString("url"));

            babyList.add(recipe);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return babyList;

}
private static String loadJsonFromAsset(String filename, Context context) {
    String json = null;

    try {
        InputStream is = context.getAssets().open(filename);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");
    }
    catch (java.io.IOException ex) {
        ex.printStackTrace();
        return null;
    }

    return json;
}

这是我WebsitAdapter.java

private Fragment mContext;
// private LayoutInflater mInflater;
private ArrayList<Website> mDataSource;
OnItemClickListener mItemClickListener;


public  class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    //each data item is just a string in this case

    public TextView url;
    public ImageView thumbnailImageView;
    public ViewHolder(View v) {
        super(v);

        url = (TextView) v.findViewById(R.id.websitename_id);
        thumbnailImageView = (ImageView) v.findViewById(R.id.website_image_id);

        v.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {


        Intent detailIntent = new Intent(view.getContext(), Webview.class);
        detailIntent.putExtra("url", url.getText().toString());

        mContext.startActivity(detailIntent);

    }





}
public interface OnItemClickListener{
    public void onItemClick(View view, int Position);
}

public void SetOnItemClickListner(final OnItemClickListener mItemClickListener){
    this.mItemClickListener = mItemClickListener;
}
public WebsiteAdapter(Fragment context, ArrayList<Website> items) {
    mContext = context;
    mDataSource = items;
    // mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.cardview_item_website, parent, false);

    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(WebsiteAdapter.ViewHolder holder, int position) {

    // - get element from arraylist at this position
    // - replace the contents of the view with that element

    Website website = mDataSource.get(position);

    holder.url.setText(website.getUrl());
    //Picasso.with(mContext).load(website.imageUrl).placeholder(R.mipmap.ic_launcher).into(holder.thumbnailImageView);

}

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

而且我的输出

enter image description here

请给我一个解决方案,如果那里有任何可能的方式来显示图像存储在文件夹绘制

java android json android-cardview
1个回答
0
投票

如果你有绘制文件夹下的本地图片为所有一)myntra B)firstCry C)跳房子等等,那么你只是单纯的需要得到基于URL正确绘制。您可以创建工厂类,它会给你@DrawableRes

    public static @DrawableRes int getDrawable(String url){
        if(url.contains("Myntra")) {
            return R.drawable.myntra;
        } else if(url.contains("Snapdeal")) {
            return R.drawable.snapdeal;
        }
        // Add other if else to support other website url
    }

下面是修改onBindViewHolder方法。

@Override
public void onBindViewHolder(WebsiteAdapter.ViewHolder holder, int position) {
   Website website = mDataSource.get(position);
   holder.url.setText(website.getUrl());
   holder.thumbnailImageView.setImageResource(getDrawable(website.getUrl()));
}
© www.soinside.com 2019 - 2024. All rights reserved.