| |||||||
Das Thema "ListView füllen mit Thread (Dialog)" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Modell: HTC Hero Registriert seit: 02.02.2010
Beiträge: 39
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
| ich lasse in der OnCreate meine ListView mit Daten füllen. Nun möchte ich während dessen einen ProgressDialog anzeigen lassen. Wenn ich alles dickgeschriebene in das run() mit reinschreibe gibt es folgenden Fehler: Wenn ich es so wie ich es jetzt gepostet habe mache funktioniert es Code: 07-31 14:37:35.868: ERROR/AndroidRuntime(9628): FATAL EXCEPTION: main
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.rocky.info/de.rocky.info.MainActivity}: java.lang.NullPointerException
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.os.Handler.dispatchMessage(Handler.java:99)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.os.Looper.loop(Looper.java:143)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.ActivityThread.main(ActivityThread.java:4196)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at java.lang.reflect.Method.invokeNative(Native Method)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at java.lang.reflect.Method.invoke(Method.java:507)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at dalvik.system.NativeStart.main(Native Method)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): Caused by: java.lang.NullPointerException
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at de.rocky.info.AppListAdapter.getCount(AppListAdapter.java:39)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.widget.ListView.setAdapter(ListView.java:454)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at de.rocky.info.MainActivity.onCreate(MainActivity.java:78)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
07-31 14:37:35.868: ERROR/AndroidRuntime(9628): ... 11 more
07-31 14:37:35.908: WARN/ActivityManager(1423): Force finishing activity de.rocky.info/.MainActivity Code: @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.applist);
mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS);
new LoadIconsTask().execute(mApps.toArray(new App[] {}));
mAppsList = (ListView) findViewById(R.id.app_list_view);
mAppsList.setOnItemClickListener(MainActivity.this);
mAdapter = new AppListAdapter(getApplicationContext());
mAdapter.setListItems(mApps);
mAppsList.setAdapter(mAdapter);
get_apps = ProgressDialog.show(MainActivity.this,
"Bitte Warten...", "Anwendungen werden geladen", false);
new Thread() {
public void run() {
try {
// Do some Fake-Work
sleep(5000);
} catch (Exception e) {
}
// Dismiss the Dialog
get_apps.dismiss();
}
}.start();
} |
| | |
| | #2 (permalink) |
| Android Experte Modell: Samsung Galaxy S2 mit CM9 | Asus Transformer Prime Registriert seit: 27.08.2010
Beiträge: 782
Abgegebene Danke: 124
Erhielt 162 Danke für 128 Beiträge
|
Ich versteh dein Problem hier nicht ganz, weil die Fehlermeldung doch alles explizit sagt: es gibt eine NullPointerException in Zeile 39 von deiner Klasse AppListAdapter. Das Problem musst du selber lösen!
__________________ Auch ich freue mich, wenn man bei mir den DANKE Button drückt ![]() PowerPoint OpenOffice Remote - Kostenlose App um PowerPoint, OpenOffice und LibreOffice fernzusteuern. Shutdown Remote - Kostenlose App um seinen PC aus der Ferne herunterzufahren. |
| | |
| | #3 (permalink) |
| Junior Mitglied Modell: HTC Hero Registriert seit: 02.02.2010
Beiträge: 39
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hallo, Mein Fehler tritt auf wenn die beiden Bold-Zeilen im try{} Block stehen. Ich nehme an das liegt daran das diese Zeile dann nix zu setzen hat: Code: mAdapter.setListItems(mApps); Code: 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): FATAL EXCEPTION: Thread-9 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): java.lang.ExceptionInInitializerError 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): at de.rocky.info.MainActivity$3.run(MainActivity.java:77) 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): at android.os.Handler.<init>(Handler.java:121) 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421) 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:421) 07-31 15:22:25.527: ERROR/AndroidRuntime(10606): at android.os.AsyncTask.<clinit>(AsyncTask.java:152)
aufrufen (ist mir nicht ganz klar wann was) Code: get_apps = ProgressDialog.show(MainActivity.this,
getString(R.string.get_app_title), getString(R.string.get_app_message), false);
new Thread() {
public void run() {
try {
// Do some Fake-Work
//sleep(5000);
mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS);
new LoadIconsTask().execute(mApps.toArray(new App[] {}));
mAppsList = (ListView) findViewById(R.id.app_list_view);
mAppsList.setOnItemClickListener(MainActivity.this);
mAdapter = new AppListAdapter(getApplicationContext());
mAdapter.setListItems(mApps);
mAppsList.setAdapter(mAdapter);
} catch (Exception e) {
}
// Dismiss the Dialog
get_apps.dismiss();
}
}.start(); |
| | |
| | #4 (permalink) |
| Android Experte Modell: Samsung Galaxy S2 mit CM9 | Asus Transformer Prime Registriert seit: 27.08.2010
Beiträge: 782
Abgegebene Danke: 124
Erhielt 162 Danke für 128 Beiträge
|
Dein Problem ist, dass du aus einem Worker-Thread auf den UI Thread zugreifen willst. Hier ist ein sehr guter Link, der das erklärt Android Guts: Intro to Loopers and Handlers Mind The Robot Besser kann ich es auch nicht erläutern und daher spare ich es mir den Text nochmal "abzuschreiben"
__________________ Auch ich freue mich, wenn man bei mir den DANKE Button drückt ![]() PowerPoint OpenOffice Remote - Kostenlose App um PowerPoint, OpenOffice und LibreOffice fernzusteuern. Shutdown Remote - Kostenlose App um seinen PC aus der Ferne herunterzufahren. |
| | |
| | #5 (permalink) |
| Junior Mitglied Modell: HTC Hero Registriert seit: 02.02.2010
Beiträge: 39
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hallo, ich habe es nunsoweit hinbekommen.. Nun zeigt er allerdings in der Liste keinerlei Elemente mehr an: Hat da jemand eine Idee? Code: get_apps = ProgressDialog.show(MainActivity.this,
getString(R.string.get_app_title),
getString(R.string.get_app_message), false);
new Thread() {
public void run() {
try {
Looper.prepare();
handler = new Handler();
mApps = loadInstalledApps(INCLUDE_SYSTEM_APPS);
new LoadIconsTask().execute(mApps.toArray(new App[] {}));
mAppsList = (ListView) findViewById(R.id.app_list_view);
mAppsList.setOnItemClickListener(MainActivity.this);
mAdapter = new AppListAdapter(getApplicationContext());
mAdapter.setListItems(mApps);
mAppsList.setAdapter(mAdapter);
// Do some Fake-Work
// sleep(5000);
} catch (Throwable t) {
Log.e("ERROR", "Fehler", t);
}
// Dismiss the Dialog
get_apps.dismiss();
}
}.start(); Code: 07-31 22:44:28.236: ERROR/ERROR(6664): Fehler 07-31 22:44:28.236: ERROR/ERROR(6664): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 07-31 22:44:28.236: ERROR/ERROR(6664): at android.view.ViewRoot.checkThread(ViewRoot.java:3094) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.view.ViewRoot.invalidateChild(ViewRoot.java:659) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:685) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2575) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.view.View.invalidate(View.java:5326) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.widget.AbsListView.resetList(AbsListView.java:1120) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.widget.ListView.resetList(ListView.java:511) 07-31 22:44:28.236: ERROR/ERROR(6664): at android.widget.ListView.setAdapter(ListView.java:440) 07-31 22:44:28.236: ERROR/ERROR(6664): at de.rocky.info.MainActivity$3.run(MainActivity.java:89) Code: private ListView mAppsList; private AppListAdapter mAdapter; mAppsList.setAdapter(mAdapter); |
| | |
| | #6 (permalink) |
| Android Guru Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
|
naja logcat sagt, du bist im falschen thread um die ui elemente zu verändern. mach dein listview update im UI thread
__________________ App Entwicklung Latest apps: Media Streamer BETA | DailyCash | MoneyManager ( PRO | HD ) |
| | |
| | #7 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Nimm einen AsyncTask und mach dein GUI Update im onPostExecute(), dafür ist er ja da.
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| | #9 (permalink) |
| Junior Mitglied Modell: HTC Hero Registriert seit: 02.02.2010
Beiträge: 39
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hallo, habe es nun gelöst bekommen, da im Hintergrund noch Icons geladen werden und diese etwas länger brauchen habe ich den ProgressDialog nun vom onPreExecute() genommen, der wird angezeigt und beendet sich dann auch nachdem die bilder geladen sind |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Listview füllen? | Chuky | Android App Entwicklung | 3 | 16.06.2011 10:11 |
| Spinner mit Daten aud .txt füllen? | rascal | Android App Entwicklung | 0 | 20.03.2011 20:20 |
| TwoLineListItem mit 2 TextViews beim Start mit Daten aus Datenbank füllen | Prengepower | Android App Entwicklung | 0 | 16.03.2011 18:47 |
| Dialog im Thread starten | jim | Android App Entwicklung | 8 | 24.02.2011 13:22 |
| Label in Folder Organizer mit Ordnern füllen | charlyman | Sonstige Apps & Widgets | 0 | 14.02.2011 21:13 |