Async Task / SimpleCursorAdapter

  • Antworten:2
  • Bentwortet
Stefan S.
  • Forum-Beiträge: 560

02.01.2012, 20:40:02 via Website

Hi NG

Wie kann ich die Daten für einen SimpleCursorAdapter laden (K2Soap)?
Zur Zeit ist mein Schirm ziemlich lange nicht ansprechbar...
1public void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3 setContentView(R.layout.pizza_main);
4
5 lvMenu = (ListView)findViewById(R.id.lvFiliale);
6
7 db = (new PizzaDB(this)).getWritableDatabase();
8 ClearFilialen();
9 tv = (TextView)findViewById(R.id.txtService);
10 tvSearchFiliale = (EditText)findViewById(R.id.txtSearchFiliale);
11 spnKategorie = (Spinner)findViewById(R.id.spnKategorie);
12 spnKanton = (Spinner)findViewById(R.id.spnKanton);
13
14 populateFiliale();
15 populatePLZ();
16 populateKategorien();
17
18 spnKategorie.setPrompt("Kategorie wählen");
19 spnKanton.setPrompt("Kanton wählen");
20
21 spnKanton.setOnItemSelectedListener(new OnItemSelectedListener() {
22
23 @Override
24 public void onItemSelected(AdapterView<?> arg0, View arg1,
25 int arg2, long arg3) {
26
27 FilterKanton( arg0.getItemAtPosition(arg2).toString());
28
29 }
30
31 @Override
32 public void onNothingSelected(AdapterView<?> arg0) {
33
34 }
35 });
36
37 spnKategorie.setOnItemSelectedListener(new OnItemSelectedListener() {
38
39 @Override
40 public void onItemSelected(AdapterView<?> arg0, View arg1,
41 int arg2, long arg3) {
42
43 FilterFiliale(kategorien.get(arg2).KatID);
44 tvSearchFiliale.setText("");
45 }
46
47 @Override
48 public void onNothingSelected(AdapterView<?> arg0) {
49
50 }
51 });
52
53 GetFilialen();
54
55 String[] fields = new String[]{
56 PizzaDB.ID, PizzaDB.FilialID, PizzaDB.FilialName, PizzaDB.FilialStrasse
57 };
58
59 registerForContextMenu(lvMenu);
60 aa = new MyFillialAdapter(getApplicationContext(), R.layout.pizza_main_item, crFiliale, fields, new int[]{R.id.txtFilialName,R.id.txtFilialStrasse});
61
62 aa.setFilterQueryProvider(new FilterQueryProvider() {
63
64 @Override
65 public Cursor runQuery(CharSequence constraint) {
66 //uri, projection, and sortOrder might be the same as previous
67 //but you might want a new selection, based on your filter content (constraint)
68 Cursor cur = GetFilialenBySearch(constraint);
69 crFiliale = cur;
70 crFiliale.requery();
71 return cur; //now your adapter will have the new filtered content
72 }
73 });
74
75
76 tvSearchFiliale.addTextChangedListener(new TextWatcher() {
77
78 @Override
79 public void onTextChanged(CharSequence s, int start, int before, int count) {
80
81 if (aa!=null) {
82 aa.getFilter().filter(s);
83
84 }
85 }
86
87 @Override
88 public void beforeTextChanged(CharSequence s, int start, int count,
89 int after) {
90
91 }
92
93 @Override
94 public void afterTextChanged(Editable s) {
95
96 }
97 });
98
99 lvMenu.setAdapter(aa);
100
101 lvMenu.setOnItemClickListener(new OnItemClickListener() {
102
103 @Override
104 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
105 long arg3) {
106
107 crFiliale.moveToPosition(arg2);
108
109 ShowNewFiliale();
110 }
111
112 });
113 }

Die drei Methoden Populate... laden je Daten aus einem WebService.
Kann ich diese irgendwie in den Background setzen?

Danke im Voraus.

Antworten
Rainu
  • Forum-Beiträge: 42

02.01.2012, 23:02:20 via Website

Du kannst die methodenaufrufe in ein thread auslagern. Dabei musst du beachten, dass du einenen Handler verwenden musst, wenn du UI-Elemente mnipulieren willst.

Antworten
Stefan S.
  • Forum-Beiträge: 560

04.01.2012, 07:59:38 via Website

Danke für den Tipp.

Ich löse es nun mit AsyncTasks und doInBackground etc

Antworten