如何从PHP JSON Parser中过滤listview数据

时间:2015-08-03 07:26:10

标签: android

我如何使用Listview中的textview过滤数据,数据来自PHP使用JSON Parser。我已经从网上搜索了但是我没有得到他们的观点,因为他们正在使用字符串数组而我使用来自php的解析数据。感谢那些愿意帮助的人。

这是代码

productlist.java

import java.util.ArrayList;

import java.util.HashMap;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.ListActivity;

import android.app.ProgressDialog;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.text.Editable;

import android.text.TextWatcher;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.EditText;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public class productlist extends ListActivity {

// Progress Dialog
private ProgressDialog pDialog;

private EditText et;

int textlength = 0;

private static final String URl = "http://192.168.254.101/productlist.php";


private static final String TAG_POSTS = "message";

private static final String TAG_BRAND = "Brand";

private static final String TAG_CATEGORY = "Category";

private static final String TAG_DESCRIPTION = "Description";

private static final String TAG_CODE = "Code";

private static final String TAG_QUANTITY = "Quantity";

private static final String TAG_UNIT = "Unit";

private static final String TAG_UNITPRICE = "Unitprice";

private JSONArray mComments = null;

//manages all of our comments in a list.

private ArrayList<HashMap<String, String>> mCommentList;

@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);


    setContentView(R.layout.productlist);

}


@Override

protected void onResume() {

    // TODO Auto-generated method stub

    super.onResume();

    //loading the comments via AsyncTask

    new LoadComments().execute();

}


public void updateJSONdata() {


    mCommentList = new ArrayList<HashMap<String, String>>();

    JSONParser jParser = new JSONParser();

    JSONObject json = jParser.getJSONFromUrl(URl);


    try {


        mComments = json.getJSONArray(TAG_POSTS);

        for (int i = 0; i < mComments.length(); i++) {

            JSONObject c = mComments.getJSONObject(i);

            //gets the content of each tag

            String brand = c.getString(TAG_BRAND);

            String category = c.getString(TAG_CATEGORY);

            String description = c.getString(TAG_DESCRIPTION);

            String code = c.getString(TAG_CODE);

            String quantity = c.getString(TAG_QUANTITY);

            String unit = c.getString(TAG_UNIT);

            String unitprice = c.getString(TAG_UNITPRICE);


            HashMap<String, String> map = new HashMap<String, String>();

            map.put(TAG_BRAND, brand);

            map.put(TAG_CATEGORY, category);

            map.put(TAG_DESCRIPTION, description);

            map.put(TAG_CODE, code);

            map.put(TAG_QUANTITY, quantity);

            map.put(TAG_UNIT, unit);

            map.put(TAG_UNITPRICE, unitprice);

            mCommentList.add(map);

        }

    } catch (JSONException e) {

        e.printStackTrace();

    }

}

private void updateList() {

    ListAdapter adapter = new SimpleAdapter(this, mCommentList,

            R.layout.single_post, new String[] { TAG_BRAND, TAG_CATEGORY,

            TAG_DESCRIPTION, TAG_CODE, TAG_QUANTITY, TAG_UNIT, TAG_UNITPRICE}, new int[]{ R.id.Brand, R.id.Category,

            R.id.Description, R.id.Code, R.id.Quantity, R.id.Unit, R.id.Price });

    setListAdapter(adapter);

    ListView lv = getListView();

    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override

        public void onItemClick(AdapterView<?> parent, View view,

                                int position, long id) {



        }

    });

}

public class LoadComments extends AsyncTask<Void, Void, Boolean> {

    @Override

    protected void onPreExecute() {

        super.onPreExecute();

        pDialog = new ProgressDialog(productlist.this);

        pDialog.setMessage("Loading Products...");

        pDialog.setIndeterminate(false);

        pDialog.setCancelable(true);

        pDialog.show();

    }

    @Override

    protected Boolean doInBackground(Void... arg0) {

        updateJSONdata();

        return null;

    }

    @Override

    protected void onPostExecute(Boolean result) {

        super.onPostExecute(result);

        pDialog.dismiss();

        updateList();

    }

}

}

productlist.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#fff" >

<LinearLayout

    android:id="@+id/top_layover"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_alignParentLeft="true"

    android:layout_alignParentTop="true"

    android:orientation="vertical" >

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/EditText01"
        android:layout_gravity="center_horizontal"
        android:hint="Search.." />

</LinearLayout>

<ListView

    android:id="@android:id/list"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_above="@+id/bottom_layover"

    android:layout_below="@+id/top_layover"

    android:background="#fff"

    android:divider="@android:color/transparent"

    android:scrollbars="none" />

<LinearLayout

    android:id="@+id/bottom_layover"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_alignParentBottom="true"

    android:layout_alignParentLeft="true"


    android:orientation="horizontal"

    android:weightSum="2" >

    <LinearLayout

        android:layout_width="0dp"

        android:layout_height="wrap_content"

        android:layout_weight="1"

        android:orientation="vertical" >

    </LinearLayout>

</LinearLayout>

singlepost.xml

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="#f0f0f0"

android:orientation="vertical" >

<LinearLayout

    android:id="@+id/box"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:layout_margin="2dp"

    android:orientation="horizontal" >

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="vertical"

        android:paddingBottom="5dp"

        android:background="#ffffff">

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Brand: ">

            </TextView>

            <TextView

                android:id="@+id/Brand"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">


            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Category: " >

            </TextView>

            <TextView

                android:id="@+id/Category"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Description: " >

            </TextView>

            <TextView

                android:id="@+id/Description"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Code: " >

            </TextView>

            <TextView

                android:id="@+id/Code"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>

        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Quantity: ">

            </TextView>

            <TextView

                android:id="@+id/Quantity"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>


        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Unit: " >

            </TextView>

            <TextView

                android:id="@+id/Unit"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>


        <LinearLayout

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:orientation="horizontal">

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:paddingLeft="5dp"

                android:text="Price: " >

            </TextView>

            <TextView

                android:id="@+id/Price"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:gravity="left"

                android:textColor="#5d5d5d"

                android:textStyle="bold" >

            </TextView>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

produclist.php

<?php

try{

    $handler= new PDO('mysql:host=localhost;dbname=account','root','');

    $handler->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

}catch(Exception $e){

    echo $e->getMessage();
    die();
}

$query =$handler->query( "Select * from tblproducts");

$records= array();

$records =$query->fetchAll(PDO::FETCH_ASSOC);

$json["message"]=$records;

echo json_encode($json);

?>

1 个答案:

答案 0 :(得分:0)

请使用以下代码,您将根据需要了解并自定义

class CustomAdpter extends BaseAdapter implements Filterable{
        LayoutInflater inflater = null;
        Activity activity;
        ItemFilter itemfilter = new ItemFilter();
        public CustomAdpter(Activity a) {

            this.activity = a;

            inflater = LayoutInflater.from(a);

        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return listBillingSearch.size();
            //return 3;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return listBillingSearch.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View view1, ViewGroup parent) {

            ViewHolder holder;

            if (view1 == null) {
                view1 = inflater.inflate(R.layout.adpter_billing, null);
                holder = new ViewHolder();

                holder.txtBillingListCompanyName = (TextView) view1.findViewById(R.id.txtBillingListCompanyName);
                holder.txtBillingListInvoice = (TextView) view1.findViewById(R.id.txtBillingListInvoice);
                holder.txtBillingListStartDate = (TextView) view1.findViewById(R.id.txtBillingListStartDate);
                holder.txtBillingListEndDate = (TextView) view1.findViewById(R.id.txtBillingListEndDate);
                holder.txtBillingListVoiceCalls = (TextView) view1.findViewById(R.id.txtBillingListVoiceCalls);
                holder.txtBillingListSMS = (TextView) view1.findViewById(R.id.txtBillingListSMS);
                holder.txtBillingListDataPlan = (TextView) view1.findViewById(R.id.txtBillingListDataPlan);


            view1.setTag(holder);
            }else{
                holder = (ViewHolder) view1.getTag();
            }

            holder.txtBillingListCompanyName.setText(listBillingSearch.get(position).getStrCompanyName());
            holder.txtBillingListInvoice.setText(listBillingSearch.get(position).getStrInvoice());
            holder.txtBillingListStartDate.setText(listBillingSearch.get(position).getStrStartDate());
            holder.txtBillingListEndDate.setText(listBillingSearch.get(position).getStrEndDate());
            holder.txtBillingListVoiceCalls.setText(listBillingSearch.get(position).getStrVoiceCall());
            holder.txtBillingListSMS.setText(listBillingSearch.get(position).getStrSMS());

            holder.txtBillingListDataPlan.setText("  "+listBillingSearch.get(position).getStrDataPlan());


            return view1;
        }

        @Override
        public Filter getFilter() {
            // TODO Auto-generated method stub
            return itemfilter;
        }

        private class ItemFilter extends Filter {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                String filterString = constraint.toString().toLowerCase();

                FilterResults results = new FilterResults();

                final List<Billing> list = listBilling;

                int count = list.size();
                final ArrayList<String> nlist = new ArrayList<String>(count);

                String filterableString ;

                ArrayList<Billing> filterdata = new ArrayList<Billing>();

                if(constraint.equals(null) || constraint.equals("")){
                    //filterdata = listBilling;
                    results.values = listBilling;
                    results.count = listBilling.size();
                }else{
               // listBillingSearch.clear();

                for (int i = 0; i < count; i++) {
                    filterableString = list.get(i).getStrCompanyName();
                    if (filterableString.toLowerCase().startsWith(filterString)) {
                        filterdata.add(listBilling.get(i));
                    }
                }

                results.values = filterdata;
                results.count = filterdata.size();
                }
                return results;
            }

            @Override
            protected void publishResults(CharSequence constraint,
                    FilterResults results) {
                //if(results.count > 0)
                listBillingSearch  = (ArrayList<Billing>) results.values;

                    notifyDataSetChanged();

            }

        }


    }

    public static class ViewHolder {

        TextView txtBillingListCompanyName;
        TextView txtBillingListInvoice ;
        TextView txtBillingListStartDate;
        TextView txtBillingListEndDate;
        TextView txtBillingListVoiceCalls;
        TextView txtBillingListSMS;
        TextView txtBillingListDataPlan;


    }

我希望它会对你有所帮助。

如果您发现任何问题,请告诉我。