Fresco
Fresco

Reputation: 363

Need to fix my adaptar to display image in ListView

New to android studio and java as well. Just learning from here and there.

Previously I made request here but everybody answered with a reference. You know It's hard to understand from reference for a new learner.

I am trying to load image in a listview with picasso but messed up with adapter. What I need is to fix my adapter.

Code for one of the TABS:

public class FinTab extends Fragment {
    ListView installs;
    ImageView image;
    static final String url = "http://192.168.5.2/test.php";
    ProgressBar dialog;
    private SimpleAdapter tva;

    static final String NAME = "name";
    static final String TASK = "task";
    static final String DESC = "desc";
    static final String MURL = "murl";


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


        installs = rootView.findViewById(R.id.install_list);
        image = rootView.findViewById(R.id.imgs);

        dialog = new ProgressBar(getActivity().getApplicationContext());
        dialog.setVisibility(View.VISIBLE);

        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String string) {
                // parseJsonData(string);
                //start
                try {
                    JSONObject object = new JSONObject(string);
                    JSONArray offers = object.optJSONArray("lists");
                    ArrayList<HashMap<String, String>> list = new ArrayList<>();

                    HashMap<String, String> item;
                    for(int i = 0; i < offers.length(); i++) {
                        JSONObject jsonChildNode = offers.getJSONObject(i);
                        item = new HashMap<>();
                        item.put(NAME, jsonChildNode.optString("name"));
                        item.put(TASK, jsonChildNode.optString("tasker"));
                        item.put(DESC, jsonChildNode.optString("descript"));
                        item.put(MURL, jsonChildNode.optString("picture"));
                        //String imageUrl = jsonChildNode.optString("picture");
                        //Picasso.with(getActivity()).load(imageUrl).into(image);

                        list.add(item);
                    }
                    tva = new MyAdapter(getActivity(), list,
                            R.layout.fin_item,
                            new String[]{NAME, TASK, DESC, MURL},
                            new int[]{R.id.line_a, R.id.line_b, R.id.line_c, R.id.imgs});
                    installs.setAdapter(tva);

                } catch (JSONException e) {
                    e.printStackTrace();
                }

                dialog.setVisibility(View.GONE);
                //end

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Toast.makeText(getActivity().getApplicationContext(), "Some error occurred!!", Toast.LENGTH_SHORT).show();
                dialog.setVisibility(View.GONE);
            }
        });

        RequestQueue rQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
        rQueue.add(request);

        return rootView;

    }

}

Messed up adapter:

public class MyAdapter extends SimpleAdapter {

    public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
        super(context, data, resource, from, to);
    }

    public View getView(int position, View convertView, ViewGroup parent){

        View v = super.getView(position, convertView, parent);

        ImageView img = (ImageView) v.getTag();
        if(img == null){
            img = (ImageView) v.findViewById(R.id.imgs);
            v.setTag(img);
        }

        String url = ((Map)getItem(position)).get(FinTab.MURL);

        Picasso.with(v.getContext()).load(url).into(img);


        return v;
    }
}

fin_tab.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.finetcity.fins">

    <ListView
        android:id="@+id/install_list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

fin_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/line_a"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="22sp"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/line_b"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="14sp" />
    <TextView
        android:id="@+id/line_c"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="14sp" />
    <TextView
        android:id="@+id/line_d"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textSize="14sp" />
    <ImageView
        android:id="@+id/imgs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:background="#000000"
        android:padding="1dp" />
</LinearLayout>

Error: on String url = ((Map)getItem(position)).get(FinTab.MURL); Required: java.lang.String Found: java.lang.Object

Please help me out.

Upvotes: 0

Views: 57

Answers (1)

no_fate
no_fate

Reputation: 1705

Try this

String url = ((Map)getItem(position)).get(FinTab.MURL).toString();

(OR)

String url = String.valueOf(((Map)getItem(position)).get(FinTab.MURL));

If you use Android studio you can click on any symbol that underlined, after a few second you may see that red exclamation mark was showed, click on it, and IDE suggest you to fix your problem.

Upvotes: 1

Related Questions