2017-01-08 2 views
0

Я хочу обновить статус пользователя, который использует приложение.onStop, onResume, функция Onpause не работает

В случае, если приложение находится на переднем плане, статус должен быть в сети. Если приложение работает в фоновом режиме, статус должен быть отключен. Я использую AsyncTask для вычисления фоновых задач. Когда я использую методы onStop, onResume и , фоновая активность висит в потоке пользовательского интерфейса.

@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

пожалуйста, добавить больше деталей с кодом. – W4R10CK

+0

@ W4R10CK Pls найдет код ... Справка по Pls ... –

+0

вы можете сократить свой код только на то, что действительно важно? это всего лишь код для проверки –

ответ

0

Методы висит ваш пользовательский интерфейс, вы можете использовать их тему:

Ex.

new Thread(new Runnable(){ 

//Your method or code 

}).start(); 
+0

Какой метод ... Должен ли я помещаться под Threads ... is это содержание onPause ... –

+0

yes .. какой метод вызывает зависание в пользовательском интерфейсе. – NehaK

0

Ваш OnPause, onResume, OnStop ... эти методы должны быть в классе деятельности, а не в AsyncTask.

, если вы посмотрите на документы, деятельность имеет следующие методы, которые можно переопределить, https://developer.android.com/reference/android/app/Activity.html

AsyncTask не имеет таких методов, поэтому он не работает. https://developer.android.com/reference/android/os/AsyncTask.html

0

Попробуйте:

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(); 
} 
Смежные вопросы