列表视图由适配器设置为空

时间:2018-11-25 14:21:58

标签: android listview adapter listadapter

我正在从服务器获取数据。然后数据将传递给适配器,但显示为空。

这是错误部分:

为什么我得到的数据为空?
我在这里遇到什么问题?

请帮助。下面我附上我的适配器代码和活动代码。

这是我的适配器代码:

public class Search_Adapter extends BaseAdapter implements Filterable {
private Context context;
private List<Model_Search.Model_Items> searchList;
private LayoutInflater inflater;
List<Model_Search.Model_Items> mStringFilterList;
ValueFilter valueFilter;


public Search_Adapter(Context context, List<Model_Search.Model_Items> searchList) {
    this.context = context;
    this.searchList = searchList;
    mStringFilterList = searchList;
}

public int getCount() {
    return searchList.size();
}

public Object getItem(int i) {
    return searchList.get(i);
}

public long getItemId(int i) {
    return i;
}

public View getView(int i, View view, ViewGroup viewGroup) {
    if (inflater == null) {
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    if (view == null) {
        view = inflater.inflate(R.layout.search_adapter_row, null);
    }

    MyTextView txtShopName = (MyTextView) view.findViewById(R.id.shop_name);
    MyTextView txtItemName = (MyTextView) view.findViewById(R.id.item_name);
    MyTextView txtPrice = (MyTextView) view.findViewById(R.id.item_price);
    ImageView shop_image = (ImageView)view.findViewById(R.id.image);

    final Model_Search.Model_Items model_items = searchList.get(i);
    String shop_name = model_items.getShop_name();
    String item_name = model_items.getItem_name();
    String price = model_items.getItem_price();
    String image = model_items.getImage();

    txtShopName.setText(shop_name);
    txtItemName.setText(item_name);
    txtPrice.setText("₹"+price+"/-");

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent in  = new Intent(context, Activity_Shop_Detail.class);
            in.setFlags(FLAG_ACTIVITY_NEW_TASK);
            in.putExtra("shop_id",model_items.getShop_id());
            context.startActivity(in);
        }
    });

    Picasso.with(context)
            .load(Url.url + "profile_photo/" + image).into(shop_image);

    return view;
}

@Override
public Filter getFilter() {
    if (valueFilter == null) {
        valueFilter = new ValueFilter();
    }
    return valueFilter;
}

private class ValueFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        if (constraint != null && constraint.length() > 0) {
            ArrayList<Model_Search.Model_Items> filterList = new ArrayList<Model_Search.Model_Items>();
            for (int i = 0; i < mStringFilterList.size(); i++) {
                if ((mStringFilterList.get(i).getItem_name().toUpperCase()).contains(constraint.toString().toUpperCase())||
                        (mStringFilterList.get(i).getShop_name().toUpperCase()).contains(constraint.toString().toUpperCase()))
                {
                    Model_Search.Model_Items bean = new Model_Search.Model_Items(mStringFilterList.get(i).getShop_id(),mStringFilterList.get(i).getItem_name(), mStringFilterList.get(i).getItem_price(),
                                                        mStringFilterList.get(i).getShop_name(),mStringFilterList.get(i).getImage());
                    filterList.add(bean);
                }
            }
            results.count = filterList.size();
            results.values = filterList;
        } else {
            results.count = mStringFilterList.size();
            results.values = mStringFilterList;
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint,
                                  FilterResults results) {
        searchList = (ArrayList<Model_Search.Model_Items>) results.values;
        //notifyDataSetChanged();
    }

}
}

这是我的活动代码:

public class Activity_Search extends AppCompatActivity implements 
SearchView.OnQueryTextListener {
JSONArray insert_tbl;
List<NameValuePair> detail=new ArrayList<NameValuePair>();
String c_id;
LinearLayout fullLayout;
ProgressBar progressBar;
ArrayList<Model_Search> model_search=new ArrayList<>();
List<Model_Search.Model_Items> model_item=new ArrayList<>();
private ListView lv;
private SearchView sv;
Search_Adapter adapter;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    //ActionBar actionBar = getSupportActionBar();
    //actionBar.setDisplayHomeAsUpEnabled(true);

    detail.clear();
    detail.add(new BasicNameValuePair("mode","search"));
    detail.add(new BasicNameValuePair("lat", ""+latitude));
    detail.add(new BasicNameValuePair("long",""+longitude));

    sv = (SearchView) findViewById(R.id.search_view);
    lv = (ListView) findViewById(R.id.lv);

    fullLayout = (LinearLayout) findViewById(R.id.fullLayout);
    progressBar = (ProgressBar)findViewById(R.id.progressBar);

    Fetch_Search_Data f = new Fetch_Search_Data();
    f.execute();

    sv.setOnQueryTextListener(this);
}

@Override
public boolean onQueryTextSubmit(String s) {
    if(!s.isEmpty()){
        lv.setVisibility(View.VISIBLE);
    }else{
        lv.setVisibility(View.INVISIBLE);
    }
    adapter.getFilter().filter(s);
    return false;
}

@Override
public boolean onQueryTextChange(String s) {
    if(!s.isEmpty()){
        lv.setVisibility(View.VISIBLE);
    }else{
        lv.setVisibility(View.INVISIBLE);
    }
    adapter.getFilter().filter(s);
    return false;
}

@Override
public void onBackPressed()
{
    finish();
    super.onBackPressed();
}

class Fetch_Search_Data extends AsyncTask<String, String, String>
{

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub

        JsonCall jparse = new JsonCall();
        JSONObject jobj = jparse.getJSONFromUrl("http://grubbasket.com/grubag/api/app/search/"+latitude+"/"+longitude, "GET",detail);

        try {

            model_search.clear();
            if (jobj != null) {
                    insert_tbl = jobj.getJSONArray("data");
                for (int i1 = 0; i1 <= insert_tbl.length(); i1++) {
                    JSONObject s = insert_tbl.getJSONObject(i1);
                    c_id = s.getString("shop_id");
                    //Toast.makeText(Activity_Search.this, c_id, Toast.LENGTH_SHORT).show();
                    if (c_id.matches("0")) {

                    } else {

                        Model_Search m = new Model_Search();
                        m.setShop_id(s.getString("shop_id"));
                        m.setShop_name(s.getString("shop_name"));
                        m.setCuisines(s.getString("cuisines"));
                        m.setImage(s.getString("image"));
                        m.setDistance(s.getString("distance"));

                        for (int j = 0; j < s.getJSONArray("items").length(); j++) {
                            JSONObject s1 = s.getJSONArray("items").getJSONObject(j);

                            Model_Search.Model_Items model_items = new Model_Search.Model_Items();

                            model_items.setShop_id(s1.getString("shop_id"));
                            model_items.setItem_name(s1.getString("item_name"));
                            model_items.setShop_name(s1.getString("shop_name"));
                            model_items.setImage(s1.getString("image"));
                            model_items.setItem_price(s1.getString("price"));

                            model_item.add(model_items);
                        }

                        m.setModel_items(model_item);

                        model_search.add(m);

                    }
                }
        }
        } catch (JSONException e) {

        }
        return null;
    }

    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub

       if(!c_id.equals("null")) {

       } else {
            //Toast.makeText(Activity_Search.this, "Data Retrieved !", Toast.LENGTH_SHORT).show();

            adapter = new Search_Adapter(getApplicationContext(), model_item);
            lv.setAdapter(adapter);
            lv.invalidate();
            lv.setVisibility(View.VISIBLE);
       }

        fullLayout.setVisibility(View.VISIBLE);
        progressBar.setVisibility(View.GONE);

        super.onPostExecute(result);
    }
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub

        fullLayout.setVisibility(View.GONE);
        progressBar.setVisibility(View.VISIBLE);

        super.onPreExecute();
    }
}
}

这是我的数组响应

{"success":true,"message":"Search Results","data":[{"shop_id":"60","uid":"85","shop_name":"The Dugout Cafe & Eatery","address":"Near apple global school","phone":"","locality":"Satellite","city":"Ahmedabad","state":"Gujarat","gst":"0","home_delivery":"NO","min_delivery_charge":"0","delivery_charge_per_km":"0","max_delivery_area_km":"5","website":"YES","website_name":"","cuisines":"cafe, italian, continental","veg":"","avg_cost":"650","min_order":"200","avg_time":"30-45","seating":"","current_status":"ONLINE","cafes":"YES","dinning":"NO","dessert":"YES","bakery":"","hotel":"","resort":"","bar":"","date":"2017-08-08","status":"active","offer_status":"","offer_percent":"0","ordering_status":"No","franchise_id":"0","payment_method":"C.O.D","gst_no":"","data_user":"7","latitude":"24.6011441","longitude":"73.7093526","image":"85.png","distance":4.2261161192851,"items":[{"item_id":"2313","mid":"336","item_name":"Classic French Fries ","description":"description","count":"1","price":"70","stock":"in","status":"active","shop_id":"60"},{"item_id":"2314","mid":"336","item_name":"Garlic Bread ","description":"description","count":"1","price":"80","stock":"in","status":"active","shop_id":"60"},{"item_id":"2315","mid":"336","item_name":"French Bruschetta ","description":"description","count":"1","price":"100","stock":"in","status":"active","shop_id":"60"},{"item_id":"2316","mid":"336","item_name":"Corn Cheese Cigar Rolls ","description":"description","count":"1","price":"100","stock":"in","status":"active","shop_id":"60"},{"item_id":"2317","mid":"336","item_name":"Maxican Cheese Balls ","description":"description","count":"1","price":"120","stock":"in","status":"active","shop_id":"60"},{"item_id":"2318","mid":"336","item_name":"Chicken Nuggets ","description":"description","count":"1","price":"150","stock":"in","status":"active","shop_id":"60"},{"item_id":"2319","mid":"336","item_name":"Fish Fingers ","description":"description","count":"1","price":"190","stock":"in","status":"active","shop_id":"60"},{"item_id":"2320","mid":"336","item_name":"Pesto Grilled Chicken ","description":"description","count":"1","price":"190","stock":"in","status":"active","shop_id":"60"},{"item_id":"2321","mid":"336","item_name":"Crispy Potato Wedges ","description":"description","count":"1","price":"70","stock":"in","status":"active","shop_id":"60"},{"item_id":"2322","mid":"336","item_name":"Cheese Garlic Bread ","description":"description","count":"1","price":"120","stock":"in","status":"active","shop_id":"60"}]},{"shop_id":"30","uid":"54","shop_name":"Bawarchi Restaurant","address":"6 - Delhi Gate, City Centre, Udaipur","phone":"6350000566","locality":"Delhi Gate","city":"Udaipur","state":"Rajasthan","gst":"2","home_delivery":"NO","min_delivery_charge":"0","delivery_charge_per_km":"0","max_delivery_area_km":"5","website":"NO","website_name":"","cuisines":"North Indian, continental","veg":"Veg","avg_cost":"1000","min_order":"150","avg_time":"30-45","seating":"YES","current_status":"OFFLINE","cafes":"NO","dinning":"YES","dessert":"NO","bakery":"NO","hotel":"NO","resort":"NO","bar":"NO","date":"08-09-2018","status":"active","offer_status":"NO","offer_percent":"0","ordering_status":"NO","franchise_id":"0","payment_method":"C.O.D,Online","gst_no":"2","data_user":"490","latitude":"24.5979398","longitude":"73.7097204","image":"54.png","distance":3.8807687984604,"items":[{"item_id":"380","mid":"167","item_name":"Jeera Aloo","description":"description","count":"1","price":"120","stock":"in","status":"active","shop_id":"30"},{"item_id":"381","mid":"167","item_name":"Aloo Tomato","description":"description","count":"1","price":"120","stock":"in","status":"active","shop_id":"30"},{"item_id":"382","mid":"167","item_name":"Aloo Palak","description":"description","count":"1","price":"125","stock":"in","status":"active","shop_id":"30"},{"item_id":"383","mid":"167","item_name":"Aloo Mutter","description":"description","count":"1","price":"120","stock":"in","status":"active","shop_id":"30"},{"item_id":"384","mid":"167","item_name":"Aloo Gobhi","description":"description","count":"1","price":"125","stock":"in","status":"active","shop_id":"30"},{"item_id":"385","mid":"167","item_name":"Gobi Masala","description":"description","count":"1","price":"130","stock":"in","status":"active","shop_id":"30"},{"item_id":"386","mid":"167","item_name":"Bhindi Masala ","description":"description","count":"1","price":"130","stock":"in","status":"active","shop_id":"30"},{"item_id":"387","mid":"167","item_name":"Palak Mutter ","description":"description","count":"1","price":"125","stock":"in","status":"active","shop_id":"30"},{"item_id":"388","mid":"167","item_name":"Aloo Palak","description":"description","count":"1","price":"125","stock":"in","status":"active","shop_id":"30"},{"item_id":"389","mid":"167","item_name":"Palak Corn ","description":"description","count":"1","price":"125","stock":"in","status":"active","shop_id":"30"}]}]}

2 个答案:

答案 0 :(得分:0)

也许您的model_item为空?您需要使用调试模式来查找错误

答案 1 :(得分:0)

我发现了实际的问题。问题在这里

model_items.setImage(s1.getString("image"));
model_items.setShop_name(s1.getString("shop_name"));

在这一行中,您可以尝试从s1对象获取图像,但是在s1中没有image字段。这就是为什么它引发异常。

删除此行,然后重试。