2017-01-08 4 views
0

Ich möchte den Status des Benutzers, den er/sie benutzt, aktualisieren.onStop, onResume, Onpause-Funktion läuft nicht

Wenn sich die App im Vordergrund befindet, muss der Status online sein. Andernfalls, wenn die App im Hintergrund ausgeführt wird, muss der Status offline sein. Ich verwende eine AsyncTask, um die Hintergrundaufgaben zu berechnen. Wenn ich die Methoden onStop, onResume und verwende, hängt die Hintergrundaktivität den UI-Thread.

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

     this.setTitle("Welcome "); 
     toolbar = (Toolbar) findViewById(R.id.signoutToolbar); 
     setSupportActionBar(toolbar); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext())); 


     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 


     tabLayout.getTabAt(0).setIcon(R.drawable.common_full_open_on_phone); 

     tabLayout.getTabAt(1).setIcon(R.drawable.messenger_bubble_large_white); 

     tabLayout.getTabAt(2).setIcon(R.drawable.messenger_bubble_large_white); 


     mAuth = FirebaseAuth.getInstance(); 

     mlisterner = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 


       if (firebaseAuth.getCurrentUser() == null) { 
        Intent intent = new Intent(MainActivity.this, GetStarted.class); 
        // intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        //check.close(); 
        // TempCdb.close(); 

        finish(); 
        startActivity(intent); 

       } else { 
        Firebase.setAndroidContext(getApplicationContext()); 
        currentuser = FirebaseAuth.getInstance().getCurrentUser(); 

        email_Current = currentuser.getEmail(); 
        email_Current = email_Current.replace(".", "@"); 
        //Toast.makeText(this, ""+email_Current, Toast.LENGTH_SHORT).show(); 
        ref = new Firebase("https://zumi-60a8f.firebaseio.com/Users/"); 


        ref.child(email_Current).child("AppStatus").setValue("Online"); 

        // startService(new Intent(getBaseContext(),BGserviceForCurrentUser.class)); 

        TempCdb = getApplicationContext().openOrCreateDatabase("zumi1.db", Context.MODE_PRIVATE, null); 
        TempCdb.execSQL(TABLE_CREATE); 

        if (mAuth.getCurrentUser() != null) { 
         Cursor check1 = TempCdb.rawQuery("select * from current_Luser", null); 
         if (check1.getCount() == 0) { 
          // Toast.makeText(this, "This is the First Time", Toast.LENGTH_SHORT).show(); 
          new BGSERIVCE().execute(); 
          check1.close(); 

         } else { 
          Toast.makeText(getApplicationContext(), "This is the NOT First Time", Toast.LENGTH_SHORT).show(); 
          check1.close(); 
         } 
         check1.close(); 
         TempCdb.close(); 
        } 

       } 

      } 
     }; 

     db = FirebaseDatabase.getInstance().getReference().child("Users"); 
     db.keepSynced(true); 


    } 

    String url; 

    public class BGSERIVCE extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 

      played = 1; 
      FirebaseUser currentuser = FirebaseAuth.getInstance().getCurrentUser(); 

      Cdb = getApplicationContext().openOrCreateDatabase("zumi1.db", Context.MODE_PRIVATE, null); 
      Cdb.execSQL(TABLE_CREATE); 

      Firebase.setAndroidContext(getApplicationContext()); 
//   Toast.makeText(getApplicationContext(), "background Running....", Toast.LENGTH_SHORT).show(); 
      String email_Current = currentuser.getEmail().replace(".", "@"); 
      ref = new Firebase("https://zumi-60a8f.firebaseio.com/Users/"); 
      values = new ContentValues(); 
      if (Cdb.isOpen()) { 
       ref.child(email_Current).addValueEventListener(new com.firebase.client.ValueEventListener() { 
        @Override 
        public void onDataChange(com.firebase.client.DataSnapshot snapshot) { 
         for (com.firebase.client.DataSnapshot postSnapshot : snapshot.getChildren()) { 

          //Adding it to a string 

          Cdb.execSQL("delete from current_Luser"); 

          url = snapshot.child("image").getValue().toString(); 
          String Dname = snapshot.child("Dname").getValue().toString(); // NAME 

          String email = snapshot.child("email_phone").getValue().toString().replace("@zumi.com", ""); // [email protected] 
          String status_E = snapshot.child("status").getValue().toString(); 

          // private static final String TABLE_CREATE="create table if not exists current_Luser (email_phone TEXT, status TEXT, Dname TEXT,image blob,snyc TEXT)"; 

          values.put("email_phone", "\"" + email + "\""); 
          values.put("status", "\"" + status_E + "\""); 
          values.put("Dname", "\"" + Dname + "\""); 
          values.put("snyc", "\"" + "Yes" + "\""); 

         } 
         //Toast.makeText(MainActivity.this, ""+values.toString(), Toast.LENGTH_SHORT).show(); 
         // new inputstream().execute(url); 

         Cdb.execSQL("insert into current_Luser(email_phone,status,Dname,snyc) values (" + values.get("email_phone") + "," + values.get("status") + "," + values.get("Dname") + "," + values.get("snyc") + ")"); 
         Toast.makeText(MainActivity.this, "Complete BG Process", Toast.LENGTH_SHORT).show(); 


        } 

        @Override 
        public void onCancelled(FirebaseError firebaseError) { 
         //System.out.println("The read failed: " + firebaseError.getMessage()); 
        } 
       }); 
      } 

//   Cdb.close(); 
      return null; 
     } 
    } // BG SERVICE__UPDATES CURRENT SQLITE 


    /* @Override 
     protected void onPause() { 
      Firebase.setAndroidContext(getApplicationContext()); 
      currentuser = FirebaseAuth.getInstance().getCurrentUser(); 
      if(currentuser==null) 
      { 

      } 
      else { 
       email_Current = currentuser.getEmail(); 
       email_Current = email_Current.replace(".", "@"); 
       //Toast.makeText(this, ""+email_Current, Toast.LENGTH_SHORT).show(); 
       ref = new Firebase("https://zumi-60a8f.firebaseio.com/Users/"); 

       ref.child(email_Current).child("AppStatus").setValue("Offline"); 
      } 
      super.onPause(); 

     } 

     @Override 
     protected void onResume() { 

      Firebase.setAndroidContext(getApplicationContext()); 
      currentuser = FirebaseAuth.getInstance().getCurrentUser(); 
      if(currentuser==null) 
      { 

      } 
      else { 
       email_Current = currentuser.getEmail(); 
       email_Current = email_Current.replace(".", "@"); 
       //Toast.makeText(this, ""+email_Current, Toast.LENGTH_SHORT).show(); 
       ref = new Firebase("https://zumi-60a8f.firebaseio.com/Users/"); 

       ref.child(email_Current).child("AppStatus").setValue("Online"); 
      } 
      super.onResume(); 
     } 
    */ 



    @Override 
    protected void onStart() { 
     super.onStart(); 
     // checkuserexist(); 
     // new BGSERIVCE().execute(); 

     mAuth.addAuthStateListener(mlisterner); 

    } 
+1

bitte weitere Details mit Code hinzufügen. – W4R10CK

+0

@ W4R10CK Bitte den Code finden ... Pls help ... –

+0

können Sie Ihren Code auf nur die Dinge verkürzen, die wirklich wichtig sind? dies ist nur zu viel Code zu überprüfen –

Antwort

0

Die Methoden, um Ihre UI hängt, können Sie sie von Thema verwenden:

Ex.

new Thread(new Runnable(){ 

//Your method or code 

}).start(); 
+0

Welche Methode ... Sollte ich unter Threads setzen ... ist es der Inhalt von onPause ... –

+0

ja .. welche Methode verursacht Hang auf UI. – NehaK

0

Probieren Sie es aus:

private void doOffline() { 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // TODO: offline 
     } 
    }, 1000); // delay 1 second 
} 

private void doOnline() { 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // TODO: online 
     } 
    }, 1000); // delay 1 second 
} 

@override 
protected void onStart() { 
    super.onStart(); 
    doOnline(); 
} 

@override 
protected void onResume() { 
    super.onResume(); 
    doOnline(); 
} 

@override 
protected void onPause() { 
    super.onPause(); 
    doOffline(); 
} 

@override 
protected void onStop() { 
    super.onStop(); 
    doOffline(); 
}