refre sh recyclerView из BroadcastReceiver, когда соединение inte rnet включено и данные обновлены до sqlserver - PullRequest
0 голосов
/ 20 марта 2020

Я хочу сделать онлайн автономную синхронизацию c данных из sqlite на sql сервер с BroadcastReceiver. Моя проблема начинается, когда я хочу использовать sendBroadcast() из NetworkMonitor.java файла

public class NetworkMonitor extends BroadcastReceiver {
PublicMethod pm = new PublicMethod();

@Override
public void onReceive(Context context, Intent intent) {
    DatabaseHelper db = new DatabaseHelper(context);
    try {
        if(pm.isOnline(context)){
            selectstatus(db, context);
            //Log.w("on", "on");
        }else{
            //Log.w("off", "off");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

private void selectstatus(DatabaseHelper db, Context context){
    Cursor cursor = db.sqliteSelectStatusTesNama();
    cursor.moveToFirst();
    for(int count=0; count < cursor.getCount(); count++) {
        cursor.moveToPosition(count);//Berpindah Posisi dari no index 0 hingga no index terakhir
        retrokirim(cursor.getString(1), db, context);
    }
}
private void retrokirim(String nama, DatabaseHelper db, Context context){
    RetrofitApi api = pm.getRetrofit(db.serverHostCall());
    Call<RetroInsNama> insNama = api.insertnama(nama);
    insNama.enqueue(new Callback<RetroInsNama>() {
        @Override
        public void onResponse(Call<RetroInsNama> call, Response<RetroInsNama> response) {
            if(db.sqliteUpdateStatusTesNama(nama) ==1){
                Toast.makeText(context, "Sukses menambahkan data online local", Toast.LENGTH_LONG).show();
                Log.w("update", "update lokal sukses");
                try {
                    context.sendBroadcast(new Intent(pm.UI_UPDATE_BROADCAST));
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("error", e.getMessage());
                }
            }else{
                Log.w("update", "update lokal gagal");
            }

        }

        @Override
        public void onFailure(Call<RetroInsNama> call, Throwable t) {
            Log.e("update", t.getMessage());
        }
    });
}

после успешного обновления данных на sqlserver я использую context.sendBroadcast (new Intent (pm.UI_UPDATE_BROADCAST)); для запуска broadcastReceiver в MainActivity.java

на MainActivity.java Я делаю регистр:

private void registerNetworkBroadcastForNougat() {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
        registerReceiver(br, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
        registerReceiver(broadcastReceiver, new IntentFilter(ConnectivityManager.pm.UI_UPDATE_BROADCAST));
    }

}

отмену регистрации

 protected void unregisterNetworkChanges() {
    try{
        unregisterReceiver(br);
        unregisterReceiver(broadcastReceiver);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterNetworkChanges();
}

и refre sh, которые используют BroadCastReceiver:

private void refresh(){
    broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            try{
                recyclerViewShow();
                Log.e("broadcastReceiver", "notice me senpai");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
}

проблема с BroadcastReceiver () в MainActivity не работает. Я что-то пропустил из своего скрипта?

Я запускаю отладку из Android 9

...