如何解决尝试在空对象引用上调用虚拟方法“void activity.CollectorListAdapter.notifyDataSetChanged()”
我正在使用微调器根据价格和距离对 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 举报,一经查实,本站将立刻删除。