Я хочу сделать онлайн автономную синхронизацию 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