【问题标题】:How I can perform database operations using asynctask to implement a progress bar?如何使用 asynctask 执行数据库操作来实现进度条?
【发布时间】:2017-02-26 16:48:07
【问题描述】:

我有一个带有列表视图的片段,并通过查询在其中设置数据。 当我在导航抽屉中选择片段时,如何执行数据库操作以选择然后使用 asynctask 设置数据以实现进度条?

这是我的片段:

public class FragmentOne extends Fragment {

ListView lv;
MyAdapter myAdapter;
SearchView sv;
ArrayList<MyObject> listMyObject;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup         container,         @Nullable Bundle savedInstanceState) {
 View view = inflater.inflate(R.layout.fragment_one, container, false);
 return view;
 }

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
sv = (SearchView) getView().findViewById(R.id.searchView);
lv = (ListView) getView().findViewById(R.id.listView);
setData("");

sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        setData(newText);
        return false;
       }
    });
}

 public void setData(String params) {
String query = "select *, count(*) as num from table where field_1 like '" +   params + "%' group by field_1 order by field_1";
listMyObject= new ArrayList<>();
DBHelper dbHelper;
SQLiteDatabase sqLiteDatabase;
String ... ;
int ...;


dbHelper = DBHelper.getInstance(getActivity().getApplicationContext());
sqLiteDatabase = dbHelper.getReadableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery(query, null);
if (cursor.getCount() > 0) {
    if (cursor.moveToFirst()) {
        do {
            ...
            listMyObject.add(new MyObject(...));
        } while (cursor.moveToNext());
    }
}
arrayAdapter = new MyAdapter(getActivity(), R.layout.listview_row, listMyObject);
lv.setAdapter(myAdapter);
dbHelper.close();
}

提前致谢。

【问题讨论】:

    标签: android sqlite android-fragments android-asynctask


    【解决方案1】:

    试试这样的:

    public void setData(final String params){
        new AsyncTask<Void, Void, List<MyObject>>() {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                // show progress bar on main thread
                showProgressBar();
            }
            @Override
            protected List<Object> doInBackground(Void... params) {
                // fetch data in background
                String query = "select *, count(*) as num from table where field_1 like '" + params + "%' group by field_1 order by field_1";
                listMyObject = new ArrayList<>();
                DBHelper dbHelper = DBHelper.getInstance(getActivity().getApplicationContext());
                SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase();
                Cursor cursor = sqLiteDatabase.rawQuery(query, null);
                if (cursor.getCount() > 0) {
                    if (cursor.moveToFirst()) {
                        do {
                            ...
                            listMyObject.add(new MyObject(...));
                        } while (cursor.moveToNext());
                    }
                }
                dbHelper.close();
                return listMyObject;
            }
            @Override
            protected void onPostExecute(List<MyObject> objects) {
                super.onPostExecute(objects);
                // set adapter and hide progress bar on main thread
                arrayAdapter = new MyAdapter(getApplication(), R.layout.listview_row, listMyObject);
                lv.setAdapter(myAdapter);
                hideProgressBar();
            }
        }.execute();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多