2016-10-17 1 views
0

Ich habe ein Fragment mit einem Listenansicht und setzen Sie Daten mit einer Abfrage darin. Wie kann ich Datenbankoperationen ausführen, um Daten auszuwählen und dann mithilfe von asynctask festzulegen, um eine Fortschrittsanzeige zu implementieren, wenn ich das Fragment in der Navigationsleiste auswähle?Wie kann ich Datenbankoperationen ausführen, die asynctask verwenden, um eine Fortschrittsanzeige zu implementieren?

Das ist mein Fragment:

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(); 
} 

Vielen Dank im Voraus.

Antwort

0

versuchen, etwas wie folgt aus:

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(); 
} 
Verwandte Themen