Пожалуйста, помогите, я не могу уволить ProgressDialog, когда синхронизация. Метод sincronizaahora вызывает метод pre для отображения progressdialog и метод actualizarDatosLocalesProductos вызывает метод pre для отклонения progressdailog, но он не за работой.Не удается уволить ProgressDialog
private void actualizarDatosLocalesProductos(JSONObject response, SyncResult syncResult)
{
JSONArray productos = null;
int j=3;
try
{
// Obtener array "productos"
productos = response.getJSONArray(Constantes.PRODUCTOS);
} catch (JSONException e) {
e.printStackTrace();
}
// Parsear con Gson
Producto[] res = gson.fromJson(productos != null ? productos.toString() : null, Producto[].class);
List<Producto> data = Arrays.asList(res);
// Lista para recolección de operaciones pendientes
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
// Tabla hash para recibir las entradas entrantes
HashMap<String, Producto> expenseMap = new HashMap<String, Producto>();
for (Producto e : data) {
expenseMap.put(e.idProducto, e);
}
// Consultar registros remotos actuales
Uri uri = ContractParaDatos.CONTENT_URI_PRODUCTO;
String select = ContractParaDatos.ColumnasProducto.ID_REMOTA + " IS NOT NULL";
Cursor c = resolver.query(uri, PROJECTION_PRODUCTOS, select, null, null);
assert c != null;
Log.i(TAG, "Se encontraron " + c.getCount() + " registros locales.");
// Encontrar datos obsoletos
String id;
String nombre;
Double precio;
Double iva;
while (c.moveToNext())
{
syncResult.stats.numEntries++;
id = c.getString(COLUMNA_ID_REMOTA);
nombre = c.getString(COLUMNA_PRODUCTO);
precio = c.getDouble(COLUMNA_PRECIO);
iva = c.getDouble(COLUMNA_IVA);
Producto match = expenseMap.get(id);
if (match != null) {
// Esta entrada existe, por lo que se remueve del mapeado
expenseMap.remove(id);
Uri existingUri = ContractParaDatos.CONTENT_URI_PRODUCTO.buildUpon().appendPath(id).build();
// Comprobar si el producto necesita ser actualizado
boolean b = match.nombrePrd != null && !match.nombrePrd.equals(nombre);
boolean b1 = match.precioPrd != precio;
boolean b2 = match.IVA != iva;
if (b || b1 || b2)
{
Log.i(TAG, "Programando actualización de: " + existingUri);
ops.add(ContentProviderOperation.newUpdate(existingUri)
.withValue(ContractParaDatos.ColumnasProducto.PRODUCTO, match.nombrePrd)
.withValue(ContractParaDatos.ColumnasProducto.PRECIO, match.precioPrd)
.withValue(ContractParaDatos.ColumnasProducto.IVA, match.IVA)
.build());
syncResult.stats.numUpdates++;
} else {
Log.i(TAG, "No hay acciones para este registro: " + existingUri);
}
} else {
// Debido a que la entrada no existe, es removida de la base de datos
Uri deleteUri = ContractParaDatos.CONTENT_URI_PRODUCTO.buildUpon()
.appendPath(id).build();
Log.i(TAG, "Programando eliminación de: " + deleteUri);
ops.add(ContentProviderOperation.newDelete(deleteUri).build());
syncResult.stats.numDeletes++;
}
}
c.close();
// Insertar items resultantes
for (Producto e : expenseMap.values())
{
Log.i(TAG, "Programando inserción de: " + e.idProducto);
ops.add(ContentProviderOperation.newInsert(ContractParaDatos.CONTENT_URI_PRODUCTO)
.withValue(ContractParaDatos.ColumnasProducto.ID_REMOTA, e.idProducto)
.withValue(ContractParaDatos.ColumnasProducto.PRODUCTO, e.nombrePrd)
.withValue(ContractParaDatos.ColumnasProducto.PRECIO, e.precioPrd)
.withValue(ContractParaDatos.ColumnasProducto.IVA, e.IVA)
.build());
syncResult.stats.numInserts++;
}
if (syncResult.stats.numInserts > 0 ||
syncResult.stats.numUpdates > 0 ||
syncResult.stats.numDeletes > 0) {
Log.i(TAG, "Aplicando operaciones...");
try
{
resolver.applyBatch(ContractParaDatos.AUTHORITY, ops);
} catch (RemoteException | OperationApplicationException e) {
e.printStackTrace();
}
resolver.notifyChange(
ContractParaDatos.CONTENT_URI_PRODUCTO,
null,
false);
Log.i(TAG, "Sincronización finalizada.");
Toast.makeText(context, "Termino", Toast.LENGTH_LONG).show();//<-----------------------------------------------------
//////////////////////////////////////////////////////77777
try {
pre(context, j);
} catch (IOException e) {
e.printStackTrace();
}
////////////////////////////////////////////////////////
} else {
Log.i(TAG, "No se requiere sincronización");
}
}
public static void sincronizarAhora(Context context, boolean onlyUpload, boolean rutas)
{
int j=2;
Log.i(TAG, "Realizando petición de sincronización manual");
Toast.makeText(context, "Cargando Datos", Toast.LENGTH_LONG).show();//<-----------------------------------------------------
try {
pre(context, j);
} catch (IOException e) {
e.printStackTrace();
}
Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContractParaDatos.NUMERO_RUTA, rutas);
if (onlyUpload)
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
ContentResolver.requestSync(obtenerCuentaASincronizar(context),
context.getString(R.string.provider_authority), bundle);
}
public static void pre(Context context, int i) throws IllegalArgumentException, SecurityException, IllegalStateException, IOException
{
ProgressDialog mProgressDialog;
mProgressDialog = new ProgressDialog(context);
if (i==2)
{
mProgressDialog.setTitle("Cargando Anuncios");
mProgressDialog.setMessage("Espere un momento...");
mProgressDialog.show();
}
else if (i==3 || mProgressDialog.isShowing())
{
mProgressDialog.dismiss();
}
}
Когда я заявляю, что глобальное в методе предварительно() У меня есть ошибка с varible. Ошибка: нестатическое поле «mProgressDialog» не может ссылаться на статический контекст. –