2016-10-17 3 views
0

나는 listview가있는 단편을 가지고 있으며 그 안에 쿼리를 사용하여 데이터를 설정합니다. 탐색 창에서 조각을 선택하면 진행률 표시 줄을 구현하기 위해 asynctask를 사용하여 데이터를 선택하고 설정하는 데이터베이스 작업을 어떻게 수행 할 수 있습니까? 사전에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(); 
} 

감사 :

내 조각이다. 이 같은

답변

0

시도 뭔가 :

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(); 
} 
관련 문제