Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

ListView füllen mit Thread (Dialog)

Das Thema "ListView füllen mit Thread (Dialog)" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 31.07.2011, 19:25   #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
Standard ListView füllen mit Thread (Dialog)

Hallo,
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();
    }
AlexRock ist offline   Mit Zitat antworten
Alt 31.07.2011, 20:56   #2 (permalink)
Android Experte
 
Benutzerbild von v Ralle v

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
Standard AW: ListView füllen mit Thread (Dialog)

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.
v Ralle v ist offline   Mit Zitat antworten
Alt 31.07.2011, 21:02   #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
Standard AW: ListView füllen mit Thread (Dialog)

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);
Auch wenn ich alles mitnehme in die run() gibt es folgenden fehler

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)
Wann müsste ich
  • Looper.prepare();
  • Looper.loop();
  • Looper.MyLoop().quit();

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();
AlexRock ist offline   Mit Zitat antworten
Alt 31.07.2011, 22:10   #4 (permalink)
Android Experte
 
Benutzerbild von v Ralle v

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
Standard AW: ListView füllen mit Thread (Dialog)

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.
v Ralle v ist offline   Mit Zitat antworten
Alt 31.07.2011, 22:53   #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
Standard AW: ListView füllen mit Thread (Dialog)

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();
Log Cat
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)
In Zeile 89 der MainActivity steht:
Code:
private ListView mAppsList;
private AppListAdapter mAdapter;
mAppsList.setAdapter(mAdapter);
AlexRock ist offline   Mit Zitat antworten
Alt 01.08.2011, 09:17   #6 (permalink)
Android Guru

Registriert seit: 09.05.2009
Beiträge: 2.389
Abgegebene Danke: 36
Erhielt 307 Danke für 289 Beiträge
Standard AW: ListView füllen mit Thread (Dialog)

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 )
swordi ist offline   Mit Zitat antworten
Alt 01.08.2011, 09:34   #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
Standard AW: ListView füllen mit Thread (Dialog)

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.
the_alien ist offline   Mit Zitat antworten
Alt 01.08.2011, 09:52   #8 (permalink)
Fortgeschrittenes Mitglied

Modell: HTC Desire HD

Registriert seit: 09.08.2010
Beiträge: 345
Abgegebene Danke: 11
Erhielt 40 Danke für 38 Beiträge
Standard AW: ListView füllen mit Thread (Dialog)

Entweder so, oder mit einem Handler synchronisieren.

Schau mal hier
Unicate ist offline   Mit Zitat antworten
Alt 01.08.2011, 14:24   #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
Standard AW: ListView füllen mit Thread (Dialog)

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
AlexRock ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "ListView füllen mit Thread (Dialog)" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.