public class ShopsList extends AppCompatActivity {
private RecyclerView listView;
private StoreListAdapter mAdapter;
private ArrayList<Stores> stores;
public static final String LOG_TAG = ShopsList.class.getName();
private String sampleURL = "http://104.199.230.125/stores/1.json/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shops_list);
StoresAsyncTask task = new StoresAsyncTask();
task.execute(sampleURL);
mAdapter = new StoreListAdapter(this, R.layout.list_item_layout, stores);
listView = (RecyclerView) findViewById(R.id.store_list);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
listView.setLayoutManager(layoutManager);
listView.setAdapter(mAdapter);
private class StoresAsyncTask extends AsyncTask<String, Void, List<Stores>> {
@Override
protected List<Stores> doInBackground(String... URLs) {
if (URLs.length < 1 || URLs[0] == null) {
Log.e("QueryUtils", "URL is is null");
return null;
}
Log.e("QueryUtils", "URL is not null" + URLs[0]);
return QueryHandler.fetchStoreData(URLs[0]);
}
@Override
protected void onPostExecute(List<Stores> data) {
mAdapter.notifyDataSetChanged();
listView.setAdapter(mAdapter);
super.onPostExecute(data);
}
}
}
он не отображает список, он просто отображает пустой список. Я использую recyclerview.adapter. Существует также эта проблема: getItemCount() генерирует исключение nullpointer, когда используется [return this.stores.size();] и приложение не открывается, когда я меняю эту строку на [return this.stores == null? 0: stores.size();] он открывается, но с пустым списком.Что случилось с этим методом onPostexecute в Asynctask?
public int getItemCount() {
Log.e(LOG_TAG, "stores size");
// return this.stores.size();
return this.stores == null ? 0 : stores.size();
}
, когда я использую List view the postexecute body тела, это и работает.
protected void onPostExecute(List<Quakes> data) {
mAdapter.clear();
if (data != null && !data.isEmpty()) {
mAdapter.addAll(data);
}
}
как правильно выполнить метод postexecute в AsyncTask, что связано с recyclerview.adapter? Разбор JSON без ошибок, только я не могу загрузить его в адаптер.
Это адаптер
общественного класса StoreListAdapter расширяет RecyclerView.Adapter {
private ArrayList<Stores> stores = new ArrayList<>();
private int itemResource;
private Context context;
public StoreListAdapter(Context context, int itemResource, ArrayList<Stores> stores) {
this.stores = stores;
this.itemResource = itemResource;
this.context = context;
}
@Override
public storeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list_item_layout, parent, false);
return new storeViewHolder(this.context, view);
}
@Override
public void onBindViewHolder(storeViewHolder holder, int position) {
Stores stores = this.stores.get(position);
holder.bindStoreData(stores);
}
@Override
public int getItemCount() {
Log.e(LOG_TAG, "stores size");
return this.stores.size();
}}
Я думаю, вы забыли положить mAdapter.notifydatasetchanged(); – Varma460
см. Первый код метода onPostExecute, не там, где mAdapter.notifydatasetchanged(); идет? Примечание: последний код метода onPostExecute работает отлично, что связано с представлением списка. приведенный выше код метода onPostExecute, связанный с recyclerview, не работает. , пожалуйста, предложите любые изменения там. –
@ P.Vamsi try commenting listView.setAdapter (mAdapter); перед Asynctask –