how to display fetched json data into listview using baseadapter

前端 未结 7 763
不知归路
不知归路 2020-11-29 07:22

I am new to android and java.Recently I am having problem with displaying fetched json data into listview using baseadapter. At first I have used this code

          


        
相关标签:
7条回答
  • 2020-11-29 07:27
                public class JSONParser {
    
                    static InputStream is = null;
                    static JSONObject jObj = null;
                    static String json = "";
    
                    // constructor
                    public JSONParser() {
    
                    }
    
                    // function get json from url
                    // by making HTTP POST or GET mehtod
                    @SuppressLint("NewApi")
                    public JSONObject makeHttpRequest(String url, String method,
                                                      List<NameValuePair> params) {
    
                        // Making HTTP request
                        try {
                            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                            StrictMode.setThreadPolicy(policy);
                            // check for request method
                            if(method == "POST"){
                                // request method is POST
                                // defaultHttpClient
                                DefaultHttpClient httpClient = new DefaultHttpClient();
                                HttpPost httpPost = new HttpPost(url);
                                httpPost.setEntity(new UrlEncodedFormEntity(params));
    
                                HttpResponse httpResponse = httpClient.execute(httpPost);
                                HttpEntity httpEntity = httpResponse.getEntity();
                                is = httpEntity.getContent();
    
                            }else if(method == "GET"){
                                // request method is GET
                                DefaultHttpClient httpClient = new DefaultHttpClient();
                                String paramString = URLEncodedUtils.format(params, "utf-8");
                                url += "?" + paramString;
                                HttpGet httpGet = new HttpGet(url);
    
                                HttpResponse httpResponse = httpClient.execute(httpGet);
                                HttpEntity httpEntity = httpResponse.getEntity();
                                is = httpEntity.getContent();
                            }
    
    
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        } catch (ClientProtocolException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
    
                        try {
                            BufferedReader reader = new BufferedReader(new InputStreamReader(
                                    is, "iso-8859-1"), 8);
                            StringBuilder sb = new StringBuilder();
                            String line = null;
                            while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                            }
                            is.close();
                            json = sb.toString();
                        } catch (Exception e) {
                            Log.e("Buffer Error", "Error converting result " + e.toString());
                        }
    
                        // try parse the string to a JSON object
                        try {
                            jObj = new JSONObject(json);
                        } catch (JSONException e) {
                            Log.e("JSON Parser", "Error parsing data " + e.toString());
                        }
    
                        // return JSON String
                        return jObj;
    
                    }
                }
    
    
            <h1>Model</h1>
            public class WorkModel {
    
                public String getId() {
                    return id;
                }
    
                public void setId(String id) {
                    this.id = id;
                }
    
                public String getName() {
                    return name;
                }
    
                public void setName(String name) {
                    this.name = name;
                }
    
                public String getImagename() {
                    return imagename;
                }
    
                public void setImagename(String imagename) {
                    this.imagename = imagename;
                }
    
                String id,name,imagename;
    
                public WorkModel(String s1,String s2,String s3)
                {
                    this.id=s1;
                    name=s2;
                    imagename=s3;
                }
            }
    
        <h1>listview fill</h1>
        public class Work_in_process extends Fragment {
    
            //////////////jsonparser implement
            JSONParser jsonparser=new JSONParser();
            JSONArray json_users=null;
            JSONObject json;
            /////////
    
            ListView lst;
            ArrayList<WorkModel> data=new ArrayList<WorkModel>();
            WorkAdapter adapter;
            Context con;
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_work_in_process, container, false);
                    con=this.getActivity();
                    lst=(ListView)rootView.findViewById(R.id.work_listview);
    
                    new work_process().execute();
    
                // Inflate the layout for this fragment
                return rootView;
            }
    
            class  work_process extends AsyncTask<String,String,String>
            {
                public Dialog pDialog;
                @Override
                protected void onPreExecute() {
                    super.onPreExecute();
    
                    pDialog = new ProgressDialog(con);
                pDialog.setMessage("Loading... Please wait...");
                pDialog.setIndeterminate(true);
                pDialog.setCancelable(true);
                pDialog.show();
                }
    
                @Override
                protected String doInBackground(String... args) {
                    data.clear();
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
    
                    json = jsonparser.makeHttpRequest("your url","POST", params);
    
                    try {
                        int success = json.getInt("status");
                        if (success == 0)
                        {
                            return  "kbc";
                        }
                        else
                        {
    
                            json_users = json.getJSONArray("result");
                            // looping through All Products
                            for (int i = 0; i < json_users.length(); i++) {
                                JSONObject c = json_users.getJSONObject(i);
                                String t1 = c.getString("id");
                                String t2 = c.getString("work_title");
                                String t3 = c.getString("image_path");
                                WorkModel da=new WorkModel(t1,t2,t3);
                                data.add(da);
                            }
    
                            return "abc";
                        }
    
                    } catch (JSONException e) {
                        e.printStackTrace();
    
                    }
    
                    return null;
                }
    
                @Override
                protected void onPostExecute(String s) {
                    super.onPostExecute(s);
                    pDialog.dismiss();
                    if(s.equals("abc"))
                    {
                        adapter = new WorkAdapter(con, data);
                        lst.setAdapter(adapter);
                        adapter.notifyDataSetChanged();
                    }
                    else
                    {
    
                    }
                }
            }
        }
    
    <h1>Adapter fill listview</h1>
    public class WorkAdapter extends BaseAdapter {
    
        private LayoutInflater inflater1=null;
        private static String string=null;
        ArrayList<WorkModel> data=null;
        Context activity;
        DisplayImageOptions options;
        protected ImageLoader imageLoader = ImageLoader.getInstance();
    
        public WorkAdapter(Context act,ArrayList<WorkModel> da)
        {
            activity=act;
            data=da;
        }
    
        @Override
        public int getCount() {
            return data.size();
        }
    
        @Override
        public Object getItem(int position) {
            return position;
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            View vi=convertView;
            if(convertView==null)
            {
                inflater1=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                vi=inflater1.inflate(R.layout.list_work,null);
            }
    
            TextView name;
            ImageView img;
            name=(TextView)vi.findViewById(R.id.list_work_name);
            img= (ImageView)vi.findViewById(R.id.list_work_img);
            WorkModel da=new WorkModel(string,string,string);
            da=data.get(position);
    
            final String p1,p2,p3;
            p1=da.getId();
            p2=da.getName();
            p3=da.getImagename();
    
            name.setText(p2);
            imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
    
            final String imgpath=""+p3;
            options = new DisplayImageOptions.Builder()
    
                    .showImageOnLoading(R.drawable.wp_loading)
                    .showImageForEmptyUri(R.drawable.wp_loading)
                    .showImageOnFail(R.drawable.wp_loading)
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .build();
    
            imageLoader.displayImage(imgpath, img,options);
    
            img.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    DisplayImageOptions options;
                    final ImageLoader imageLoader = ImageLoader.getInstance();
    
                    final Dialog emailDialog =new Dialog(activity, android.R.style.Theme_DeviceDefault);
                    emailDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    
                    emailDialog.setCancelable(true);
                    emailDialog.setContentView(R.layout.zoom_imge);
    
                    ImageView image = (ImageView) emailDialog.findViewById(R.id.zoom_image_img);
                    emailDialog.show();
    
                    final String imgpath=""+p3;
                    options = new DisplayImageOptions.Builder()
                            .showImageOnLoading(R.drawable.wp_loading)
                            .showImageForEmptyUri(R.drawable.wp_loading)
                            .showImageOnFail(R.drawable.wp_loading)
                            .cacheInMemory(true)
                            .cacheOnDisk(true)
                            .build();
    
                    imageLoader.displayImage(imgpath, image, options);
                }
            });
    
    
    
    
            return vi;
        }
    }
    
    0 讨论(0)
  • 2020-11-29 07:29

    First u need t create row_listitem.xml file like:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="80dp"
    android:background="@drawable/list_selector"
    android:orientation="vertical"
    android:padding="5dp" >
    
    <ImageView
        android:id="@+id/iv_icon_social"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_centerVertical="true"
        android:background="@drawable/image_border"
        android:src="@drawable/sms_t"
        android:visibility="gone" />
    
    <LinearLayout
        android:id="@+id/thumbnail"
        android:layout_width="fill_parent"
        android:layout_height="85dp"
        android:layout_marginRight="50dp"
        android:layout_marginTop="0dp"
        android:layout_toRightOf="@+id/iv_icon_social"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:padding="5dip"
        android:visibility="visible" >
    
        <TextView
            android:id="@+id/txt_ttlsm_row"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="10dp"
            android:text="Sample text"
            android:textSize="18dp"
            android:textStyle="bold" />
    
        <TextView
            android:id="@+id/txt_ttlcontact_row2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="0dp"
            android:layout_marginTop="3dp"
            android:paddingLeft="10dp"
            android:maxEms="20"
            android:maxLines="2"
            android:singleLine="false"
            android:ellipsize="end"
            android:text="Sample text2"
            android:textColor="#808080"
            android:textSize="15dp"
            android:textStyle="normal"
            android:visibility="visible" />
    
    
    </LinearLayout>
    
    </RelativeLayout>
    

    Now, u need to create Custom BaseAdapter like:

      public class BaseAdapter2 extends BaseAdapter {
    
    private Activity activity;
    // private ArrayList&lt;HashMap&lt;String, String&gt;&gt; data;
    private static ArrayList title,notice;
    private static LayoutInflater inflater = null;
    
    public BaseAdapter2(Activity a, ArrayList b, ArrayList bod) {
        activity = a;
        this.title = b;
        this.notice=bod;
    
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
    }
    
    public int getCount() {
        return title.size();
    }
    
    public Object getItem(int position) {
        return position;
    }
    
    public long getItemId(int position) {
        return position;
    }
    
    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.row_listitem, null);
    
        TextView title2 = (TextView) vi.findViewById(R.id.txt_ttlsm_row); // title
        String song = title.get(position).toString();
        title2.setText(song);
    
    
        TextView title22 = (TextView) vi.findViewById(R.id.txt_ttlcontact_row2); // notice
        String song2 = notice.get(position).toString();
        title22.setText(song2);
    
    return vi;
    
    }
    

    }

    Now, u can set up your main activity like:

    public class MainActivity extends Activity {
    
    ArrayList<String> title_array = new ArrayList<String>();
    ArrayList<String> notice_array = new ArrayList<String>();
    ListView list;
    BaseAdapter2 adapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView) findViewById(R.id.listView1);
        new TheTask().execute();
    }
    
    class TheTask extends AsyncTask<Void, Void, String> {
    
        @Override
        protected String doInBackground(Void... params) {
            String str = null;
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(
                        "http://10.0.2.2/BSDI/show.php");
                HttpResponse response = httpclient.execute(httppost);
                str = EntityUtils.toString(response.getEntity());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            return str;
    
        }
    
    
    
    @Override
    protected void onPostExecute(String result) {
    
        super.onPostExecute(result);
    
        String response = result.toString();
        try {
    
    
            JSONArray new_array = new JSONArray(response);
    
            for (int i = 0, count = new_array.length(); i < count; i++) {
                try {
                    JSONObject jsonObject = new_array.getJSONObject(i);
                    title_array.add(jsonObject.getString("title").toString());
                    notice_array.add(jsonObject.getString("notice").toString());
    
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
            adapter = new BaseAdapter2(MainActivity.this, title_array, notice_array);
            list.setAdapter(adapter);
    
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            // tv.setText("error2");
        }
    
    }
    }
    
     }
    
    0 讨论(0)
  • 2020-11-29 07:32

    In this example, I am connecting to Twitters public timeline JSON url.

    package net.inchoo.demo.andy1;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import android.app.ListActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
    
    public class HomeActivity extends ListActivity {
    
        /** Called when the activity is first created. */
        @SuppressWarnings({ "rawtypes", "unchecked" })
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fetchTwitterPublicTimeline()));        
        }
    
        public ArrayList<String> fetchTwitterPublicTimeline()
        {
            ArrayList<String> listItems = new ArrayList<String>();
    
            try {
                URL twitter = new URL(
                        "http://twitter.com/statuses/public_timeline.json");
                URLConnection tc = twitter.openConnection();
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        tc.getInputStream()));
    
                String line;
                while ((line = in.readLine()) != null) {
                    JSONArray ja = new JSONArray(line);
    
                    for (int i = 0; i < ja.length(); i++) {
                        JSONObject jo = (JSONObject) ja.get(i);
                        listItems.add(jo.getString("text"));
                    }
                }
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return listItems;
        }
    }
    

    Please direct your attention on the listItems.add(jo.getString(“text”)); line. This is the part that I am grabbing a “text” attribute/property of single JSON object. To get a more “visual” picture of all available attributes/properties you might want to take a look at the XML version of twitters public timeline. This way you will get nice colored XML in your browser, where you can see all available attributes.

    Link: http://inchoo.net/dev-talk/android-development/simple-android-json-parsing-example-with-output-into-listactivity/

    0 讨论(0)
  • 2020-11-29 07:37

    Get schedule

    public class GetSchedule extends Activity {
    
        // JSON Node Names
        private static final String TAG_SNO = "sno";
        private static final String TAG_STNCODE = "stnCode";
        private static final String TAG_STATION = "station";
        // private static final String TAG_ROUTENO= "routeNo";
        private static final String TAG_ARRIVALTIME = "arrivalTime";
        private static final String TAG_DEPTIME = "depTime";
    
        private JSONArray station = null;
    
        private ListView list;
        //private static String url = "http://railpnrapi.com/api/route/train/";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_get_schedule);
    
            try {
                ArrayList<HashMap<String, String>> stnNamelist = new    ArrayList<HashMap<String, String>>();
    
                // Getting JSON Array
                // JSONObject job = new JSONObject();
                //JSONArray jArray = ModuleClass.trainScheduleJSONObject.getJSONArray("stnName");
                JSONObject json_data = null;
                station= ModuleClass.trainScheduleJSONObject.getJSONArray(TAG_STATION);
                for (int i = 0; i < station.length(); i++) {
                    json_data = station.getJSONObject(i);
    
                    // JSONObject c = stnName.getJSONObject(0);
    
                    // Storing  JSON item in a Variable
    
                    String sno = json_data.getString(TAG_SNO);
                    String stnCode = json_data.getString(TAG_STNCODE);
                    // String distance= c.getString(TAG_DISTANCE);
                    // String routeNo = c.getString(TAG_ROUTENO);
                    String arrivalTime = json_data.getString(TAG_ARRIVALTIME);
                    String depTime = json_data.getString(TAG_DEPTIME);
                    // String haltTime = c.getString(TAG_HALTTIME);
                    // String tday= c.getString(TAG_TDAY);
                    // String remark = c.getString(TAG_REMARK);
                    // Adding value HashMap key => value
                    stnNamelist = new ArrayList<HashMap<String, String>>();
    
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(TAG_SNO, sno);
                    map.put(TAG_STNCODE, stnCode);
                    map.put(TAG_DEPTIME, depTime);
                    map.put(TAG_ARRIVALTIME, arrivalTime);
                    // map.put(TAG_DEPTIME,depTime );
    
                    stnNamelist.add(map);
                    list = (ListView) findViewById(R.id.listView1);
                    final SimpleAdapter sd;
                    sd = new SimpleAdapter(this, stnNamelist, R.layout.activity_get_schedule, 
                            new String[] { TAG_SNO, TAG_STNCODE, TAG_ARRIVALTIME, TAG_DEPTIME },
                            new int[] { R.id.textView1, R.id.textView2, R.id.textView3, R.id.textView4});
                    list.setAdapter(sd);
                    /*
                     * list.setOnItemClickListener(new
                     * AdapterView.OnItemClickListener() {
                     * 
                     * @Override public void onItemClick(AdapterView<?> parent, View
                     * view, int position, long id) { Toast.makeText(
                     * MainActivity.this, "You Clicked at " +
                     * stnNamelist.get(+position).get( "name"), Toast.LENGTH_SHORT)
                     * .show(); } });
                     */
                }
                // Set JSON Data in TextView
                // uid.setText(id);
                // name1.setText(name);
                // email1.setText(email);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    
    
            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.get_schedule, menu);
            return true;
        }
    
    }
    
    0 讨论(0)
  • 2020-11-29 07:39

    Json parser:

    public class jparser {
    
    static InputStream istream = null;
    static JSONObject jObj = null;
    //static JSONArray jarray=null;
    static String json = "";
    //static JSONArray jarray = null;
    
    // constructor
    public jparser() {
    }
    
    public JSONObject getJFromUrl(String url) {
        // Making HTTP request
        //try {
            // defaultHttpClient
             StringBuilder builder = new StringBuilder();
    
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            /*HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            istream = httpEntity.getContent();*/
            try{
            HttpResponse response = httpClient.execute(httpPost);
    
            StatusLine statusLine = response.getStatusLine();
    
            int statusCode = statusLine.getStatusCode();
    
             if (statusCode == 400) 
             {
               HttpEntity entity = response.getEntity();
    
               InputStream content = entity.getContent();
    
               BufferedReader reader = new BufferedReader(new InputStreamReader(content));
    
               String line;
    
               while ((line = reader.readLine()) != null) 
               {
                 builder.append(line);
               }
             } 
             else
             {
                 Log.e("==>", "Failed to download file");
             }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(istream, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            istream.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
        // return JSON String
        return jObj;
    
       // Parse String to JSON object
    
         /*try {
                jarray = new JSONArray( builder.toString());
            } catch (JSONException e) {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }
    
            // return JSON Object
            return jarray;
    
        }*/
        }
    
    }
    
    0 讨论(0)
  • 2020-11-29 07:40

    ListView from JSON data fetched using Retrofit2 service

    JSON response

    {
      "results": [
        {
          "phone": "+9178XXXX66",
          "name": "Olivia"
        },
        {
          "phone": "+9178XXXX66",
          "name": "Isla"
        },
        {
          "phone": "+9178XXXX66",
          "name": "Emily"
        },
        {
          "phone": "+9178XXXX66",
          "name": "Amelia"
        },
        {
          "phone": "+9178XXXX66",
          "name": "Sophia"
        }],
      "statusCode": "1",
      "count": "2"
    }
    

    In MainActivity.java we will pass JSON data as ArrayList(dummyData)

        customListAdapter = new CustomListAdapter(getApplicationContext(), dummyData);
        listView = (ListView) findViewById(R.id.listShowJSONData);
        listView.setAdapter(customListAdapter);
    

    In custom BaseAdapter our

    ...
    ...
    @Override
    public MyModel getItem(int i) {
        return this.users.get(i);
    }
    
    @Override
    public long getItemId(int i) {
        return i;
    }
    
    
    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        if(view==null)
        {
            view= LayoutInflater.from(c).inflate(R.layout.json_data_list,viewGroup,false);
        }
    
        TextView mUserDetails = (TextView) view.findViewById(R.id.userDetails);
        TextView mUserStatus = (TextView) view.findViewById(R.id.userStatus);
    
    
        Object getrow = this.users.get(i);
        LinkedTreeMap<Object,Object> rowmap = (LinkedTreeMap) getrow;
        String name = rowmap.get("name").toString();
        String phone = rowmap.get("phone").toString();
    
        mUserDetails.setText(name);
        mUserStatus.setText(phone);
    
        return view;
    }
    ...
    ...
    

    Here MyModel will be used as custom mapping model of response we will get from service

    See link for complete code explanation

    0 讨论(0)
提交回复
热议问题