问题描述
我正在使用微调器根据价格和距离对 CollectorList 进行排序,当我使用菜单尝试排序时,排序工作正常,但我使用微调器适配器。notifyDataSetChanged();告诉我
尝试在空对象引用上调用虚方法“void activity.Collectorlistadapter.notifyDataSetChanged()”
有人可以帮我解决这个问题吗?
活动代码:
public class DetailedProductsActivity extends AppCompatActivity implements
AdapterView.OnItemSelectedListener{
private static final String TAG = "DetailedProducts";
public ArrayList<Shop> ShopList = new ArrayList<>();
public ArrayList<offers> Shop_ProductList = new ArrayList<>();
public ArrayList<Collector> CollectorList = new ArrayList<>();
private TextView mname,mdescription;
private ImageView mImage;
Collectorlistadapter adapter;
Collector cn = new Collector();
String [] actions={"Price Low to High","Price High to Low","distance Low to High","distance High to Low"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detailed_products);
mname = findViewById(R.id.Productname);
mdescription = findViewById(R.id.description);
mImage = findViewById(R.id.imgView);
// Catching incoming intent
Intent intent = getIntent();
mname.setText(intent.getStringExtra("name"));
mdescription.setText(intent.getStringExtra("description"));
Glide.with(DetailedProductsActivity.this).load(intent.getStringExtra("image_url")).into(mImage);
final ListView mListView = (ListView) findViewById(R.id.listView10);
//SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT//
//SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT//
//SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT/SHOP_PRODUCT//
// Get the Offers(SHOP_PRODUCT) Table Data and Store it in Shop_ProductList list
StringRequest stringRequest1 = new StringRequest(Request.Method.GET,AppConfig.URL_SHOP_PRODUCT,new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
Intent intent = getIntent();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
// If Condition to Only Put the Data with the same Product Id that we Get From Home Activity
if (jsonObject.getInt("product_id") == intent.getIntExtra("id",0)) {
offers pz = new offers();
pz.setId(jsonObject.getInt("id"));
pz.setShopid(jsonObject.getInt("shop_id"));
pz.setProductid(jsonObject.getInt("product_id"));
pz.setPrice(jsonObject.getInt("price"));
pz.setSpecialoffers(jsonObject.getString("special_offers"));
cn.setPrice(jsonObject.getInt("price"));
cn.setSpecialoffers(jsonObject.getString("special_offers"));
Shop_ProductList.add(pz);
}
}
} catch (JSONException e) {
e.printstacktrace();
}
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(DetailedProductsActivity.this,"Something went wrong",Toast.LENGTH_LONG).show();
error.printstacktrace();
}
}) {
};
Volley.newRequestQueue(this).add(stringRequest1);
//SHOP//SHOP//SHOP/SHOP//SHOP//SHOP//SHOP//SHOP//SHOP/SHOP//SHOP//SHOP/SHOP//SHOP//SHOP//SHOP//SHOP//SHOP/ SHOP//SHOP//
//SHOP//SHOP//SHOP/SHOP//SHOP//SHOP//SHOP//SHOP//SHOP/SHOP//SHOP//SHOP/SHOP//SHOP//SHOP//SHOP//SHOP//SHOP/ SHOP//SHOP//
//SHOP//SHOP//SHOP/SHOP//SHOP//SHOP//SHOP//SHOP//SHOP/SHOP//SHOP//SHOP/SHOP//SHOP//SHOP//SHOP//SHOP//SHOP/ SHOP//SHOP//
// Get the Shop Table Data and Store it in ShopList list
// then Store it in CollectorList List to Show it in the ListView
StringRequest stringRequest10 = new StringRequest(Request.Method.GET,AppConfig.URL_SHOP,new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
Thread.sleep(100);
JSONArray jsonArray = new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Shop pn = new Shop();
pn.setId(jsonObject.getInt("id"));
pn.setName(jsonObject.getString("name"));
pn.setLatitude(jsonObject.getDouble("latitude"));
pn.setLongitude(jsonObject.getDouble("longitude"));
if (isValidProduct(pn)) {
ShopList.add(pn);
} else {
}
}
adapter = new Collectorlistadapter(DetailedProductsActivity.this,R.layout.activity_collector_list_adapter,CollectorList);
mListView.setAdapter(adapter);
} catch (JSONException e) {
e.printstacktrace();
} catch (InterruptedException e) {
e.printstacktrace();
}
}
},Toast.LENGTH_LONG).show();
error.printstacktrace();
}
}) {
};
Volley.newRequestQueue(this).add(stringRequest10);
//Getting the instance of Spinner and applying OnItemSelectedListener on it
Spinner spin = (Spinner) findViewById(R.id.spinner2);
spin.setonItemSelectedListener(this);
//Creating the ArrayAdapter instance having the country list
ArrayAdapter aa = new ArrayAdapter(this,android.R.layout.simple_spinner_item,actions);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//Setting the ArrayAdapter data on the Spinner
spin.setAdapter(aa);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu,menu);
return true;
}
@Override
public boolean onoptionsItemSelected(MenuItem item) {
//Handle item selection
switch (item.getItemId()) {
case R.id.sort1:
//perform any action;
Collections.sort(CollectorList,Collector.PriceSortLowToHigh);
adapter.notifyDataSetChanged();
return true;
case R.id.sort11:
//perform any action;
Collections.sort(CollectorList,Collector.PriceSortHighToLow);
adapter.notifyDataSetChanged();
return true;
case R.id.sort2:
//perform any action;
Collections.sort(CollectorList,Collector.distanceSortLowToHigh);
adapter.notifyDataSetChanged();
return true;
case R.id.sort22:
//perform any action;
Collections.sort(CollectorList,Collector.distanceSortHighToLow);
adapter.notifyDataSetChanged();
return true;
default:
return super.onoptionsItemSelected(item);
}
}
//Performing action onItemSelected and onnothing selected
@Override
public void onItemSelected(AdapterView<?> arg0,View arg1,int i,long l) {
//Toast.makeText(getApplicationContext(),actions[i],Toast.LENGTH_LONG).show();
switch (i) {
case 0:
//perform any action;
Collections.sort(CollectorList,Collector.PriceSortLowToHigh);
adapter.notifyDataSetChanged();
break;
case 1:
//perform any action;
Collections.sort(CollectorList,Collector.PriceSortHighToLow);
adapter.notifyDataSetChanged();
break;
case 2:
//perform any action;
Collections.sort(CollectorList,Collector.distanceSortLowToHigh);
adapter.notifyDataSetChanged();
break;
case 3:
//perform any action;
Collections.sort(CollectorList,Collector.distanceSortHighToLow);
adapter.notifyDataSetChanged();
break;
default:
break;
}
}
@Override
public void onnothingSelected(AdapterView<?> arg0) {
// Todo Auto-generated method stub
}
// isValidProduct to Only Put the Data with the same Shop Id that we Get From ShopList list
boolean isValidProduct(Shop shop) {
boolean result = false;
for (offers offer : Shop_ProductList) {
if (offer.getShopid() == shop.getId()) {
Collector cn = new Collector();
cn.setName(shop.getName());
cn.setLatitude(shop.getLatitude());
cn.setLongitude(shop.getLongitude());
cn.setPrice(offer.getPrice());
cn.setSpecialoffers(offer.getSpecialoffers());
SharedPreferences Preferences = PreferenceManager.getDefaultSharedPreferences(DetailedProductsActivity.this);
int id = Preferences.getInt("user_id",1);
cn.setUserid(id);
cn.setShopid(offer.getShopid());
cn.setProductid(offer.getProductid());
CollectorList.add(cn);
Log.d(TAG,"CollectorList :" + CollectorList.toString());
result = true;
}
}
return result;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)