SQLiteDatabase является синхронным или асинхронным? - PullRequest
0 голосов
/ 28 мая 2019

У меня есть приложение, которое открывает новое намерение. Новое намерение вставляет несколько строк в базу данных, а затем finish (); и вернитесь к первому экрану, где данные должны были обновиться с новой строкой. У меня есть код не работает на выполнение, но работает при отладке ... так что, может быть, где-то есть некоторые задержки ... может быть? как ждать завершения запроса?

Вот мой код:

на первом экране:

настройка адаптера и onResume

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    v= inflater.inflate(R.layout.filters_fragment,container,false);

    createFragmentWidgets();


    myrecyclerview = (RecyclerView) v.findViewById(R.id.contact_recycleview);
    recyclerAdapter = new RecyclerViewAdapterFilters(getContext(), lstFilters);
    myrecyclerview.setLayoutManager(new LinearLayoutManager((getActivity())));
    myrecyclerview.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));
    myrecyclerview.setAdapter(recyclerAdapter);

    return v;
}


@Override
public void onResume()
{  
// After a pause OR at startup
    super.onResume();

    lstFilters = mydb.getAllFilters("BL");
    recyclerAdapter.notifyDataSetChanged();
}

метод getAllFilters для класса БД

public List<Filter> getAllFilters(String type) {
    List<Filter> lstFilter  = new ArrayList<>();

    //hp = new HashMap();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res =  db.rawQuery( "select * from " + FILTERS_TABLE_NAME+" where type='"+type+"'", null );
    res.moveToFirst();

    while(res.isAfterLast() == false){
        lstFilter.add(new Filter (res.getInt(res.getColumnIndex(FILTERS_COLUMN_ID)),
                res.getString(res.getColumnIndex(FILTERS_COLUMN_NAME)),
                res.getString(res.getColumnIndex(FILTERS_COLUMN_NUMBER)),
                res.getString(res.getColumnIndex(FILTERS_COLUMN_PHOTO)),
                res.getString(res.getColumnIndex(FILTERS_COLUMN_TYPE))));
        res.moveToNext();
    }

    res.close();
    db.close();

    return lstFilter;
}

есть идеи?

Ответы [ 2 ]

1 голос
/ 28 мая 2019

После того, как вы обновите свой список, должно быть достаточно вызвать notifyDataSetChanged (), однако я обычно просто сбрасываю адаптер:

    adapter = new ClaimListAdapter(this, thisContext, claimItems);
    mClaimList.setAdapter(adapter);
0 голосов
/ 28 мая 2019

, поскольку вы заменяете содержимое списка, позвоните adapter.notifyDataSetChanged(), чтобы обновить весь список.

...