Layout wird erst angezeigt nachdem ein Dialog angezeigt wird

  • Antworten:5
  • Bentwortet
Michael Stoll
  • Forum-Beiträge: 9

10.04.2015, 14:59:16 via Website

Hey zusammen,
ich habe eine neue LauncherActivity erstellt in dieser soll überprüft werden ob eine Internet Verbindung besteht und ob die Datenbank schon einen Eintrag enthält. Wenn die Datenbank keinen Eintrag enthält wird ein AlertDialog geladen.
Das Problem ist das Layout wird nicht angezeigt, erst wenn der AlertDialog geladen wird wird auch das Layout geladen. Habe bereits das Projekt gecleant, die R.java gelöscht, Emulator neu gestartet, Eclipse neu gestartet, sowie auf dem Handy getestet. Hab nun auch noch die Activity + layout komplett gelöscht und nochmal neu geschrieben, hat leider auch nicht geholfen. Weiß echt nicht mehr weiter und wäre über jede Hilfe dankbar. Unten findet ihr noch den Code, es wird kein Fehler in LogCat ausgegeben.
Grüße Michi

LauncherActivity.java:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        progress = (ProgressBar) findViewById(R.id.progressBar);
        textState = (TextView)findViewById(R.id.stat);
        textState.setText("Loading Data");

        dbGroup = new GroupsDataSource(this);
        dbGroup.open();

        dbPersonGroup = new Person_Group_DataSource(this);
        dbPersonGroup.open();

        dbPerson = new PersonDataSource(this);
        dbPerson.open();

        cd = new ConnectionDetector(getApplicationContext());
        // Check if Internet present
        if (!cd.isConnectingToInternet()) {
            Toast.makeText(this, "Keine Internet Verbindung!Keine volle Nutzung der App", Toast.LENGTH_LONG).show();
        } 


        if(dbPerson.isempty() == true){
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.alertdialog_message_no_data);
            builder.setTitle(R.string.alertdialog_title_no_data);
            builder.setNeutralButton(R.string.alertdialog_create, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent main = new Intent(getApplication(), MainActivity.class);
                    startActivity(main);
                    finish();

                }
            });
            builder.setPositiveButton(R.string.alertdialog_exit, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    System.exit(0);         
                }
            });
            AlertDialog alert = builder.create();
            alert.setCanceledOnTouchOutside(false);
            alert.show();
        } else {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.alertdialog_message_no_data);
            builder.setTitle(R.string.alertdialog_title_no_data);
            builder.setNeutralButton(R.string.alertdialog_create, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Intent main = new Intent(getApplication(), MainActivity.class);
                    startActivity(main);
                    finish();                   
                }
            });
            builder.setPositiveButton(R.string.alertdialog_exit, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    System.exit(0);         
                }
            });
            AlertDialog alert = builder.create();
            alert.setCanceledOnTouchOutside(false);
            alert.show();
        }       
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.launcher, menu);
        return true;
    }

    @Override
    protected void onResume() {
        dbPerson.open();
        dbGroup.open();
        dbPersonGroup.open();
        super.onResume();
    }

    @Override
    protected void onPause() {
        dbPerson.close();
        dbGroup.close();
        dbPersonGroup.close();
        super.onPause();
    }
}

activity_start.xml:

    <LinearLayout xmlns:android="schema...(darf leider keine links posten)"
    xmlns:tools="schema.."
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher_catchup_sports_new" />


    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />

    <TextView
        android:id="@+id/stat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="36dp"
        android:text="Loading Data" />
</LinearLayout>

— geändert am 10.04.2015, 17:50:23

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.04.2015, 21:49:31 via Website

Hallo Michael,

benötigt die onCreate und das öffnen und überprüfen der DBs viel Zeit?
Dann kann es sein, dass sich danach erst dein Layout zeigt.
Da gibt es 3 alternetiven:
1. alles in eine andere Methode z.b. onStart packen
2. alles in einem anderen Thread ausühren (ist aber nicht notwendig)
3. verzögert über einen Handler aufrufen lassen

— geändert am 10.04.2015, 21:49:55

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Michael Stoll
  • Forum-Beiträge: 9

11.04.2015, 16:09:21 via Website

Hey Pascal,
danke für deine Hilfe. Leider hat das auch nicht geholfen, aber die dbs brauchen auch kaum zeit (klappt bei allen anderen Activitys auch problemlos).
Bin weithin dankbar für jede Hilfe
Grüße Michi

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.04.2015, 16:18:27 via App

Kommentiere mal alles was zur DB gehört aus. Wenn es dann immer nich nicht geht stimmt etwas mit dem Rest nicht. Sonst deinen Code mal schritt für schritt testen und schauen wo es hängt.
Dafür kann man dann auch gut den Debugger oder LogCat nutzen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Michael Stoll
  • Forum-Beiträge: 9

11.04.2015, 16:43:56 via Website

So hab jetzt mal die ganzen abfragen (datenbank und internet connection) in einen Asynctask gepackt. Jetzt funktioniert es auch. Hab mal wieder was völlig verplant, aber wäre ohne dich wahrscheinlich nie drauf gekommen. Denn wenn man sich den LifeCycle ja mal anschaut ist es ja klar das zuerst die onCreate vollständig ausgeführt und dann anzeigt wird.
Danke Pascal! Hast mir wirklich geholfen, mir ist grad mal wieder ein riesen Licht aufgegangen :D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.04.2015, 16:57:35 via Website

Sehr schon :)
Dann kannst du ja deinen Thread auf "Beantwortet" setzen.
(Dazu einfach im Browser über deinem ersten post auf "Mehr"->"Beantwortet")
Danke (smug)
LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten