Usando SharedPreferences para salvar la variable hace que mi accidente de aplicación

Daniel Andersson:

Estoy usando el SharedPreferencesde parada de conseguir mi variables para mi aplicación cuando la aplicación se cierra o aperturas.

Estoy utilizando el mismo tipo de método / código para todos mi variables y funciona, a excepción de una variable.

Creo que tal vez el problema podría ser que esta variable también está programado para reiniciar a = 0 a una hora específica cada día. (Estoy usando BroadcastReceiver para esto).

Dado que esta es la única variable que se restablece en un momento determinado, y la misma variable se bloquea cuando intento desviar con SharedPreferences, puede haber algo acerca de esas dos cosas que hacen que mi aplicación enojado.

  SharedPreferences settings2= getSharedPreferences(PREFS_NAME,0); 

Específicamente esta línea de código a continuación suele bloquearse la aplicación

dosesTaken = settings2.getInt("dosesTaken",dosesTaken);

Esta es la clase para el "BroadcastReciver"

import ...

public class AlarmResetTaken extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        MainActivity.dosesTaken = 0;
        MainActivity.setDosage();
        Activity2.takenDoseText.setText (Integer.toString(MainActivity.dosesTaken));
    }
}

Este es el método en el MainActivity para el "BroadcastReciver"

private void setAlarmResetDose(long timeInMillis) {
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmResetTaken.class);    
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,intent,0);    
    alarmManager.setRepeating(AlarmManager.RTC, timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent);
}

Y el método de fijación de tiempo específico para restablecer.

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    timeDoseResetHour = hourOfDay;
    timeDoseResetMin = minute;    
    timeDoseResetText.setText( String.format("%02d",hourOfDay) +" : " + String.format("%02d",minute));

        Calendar calendar = Calendar.getInstance();
        calendar.set(
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH),
                hourOfDay,
                minute,
                0
        );
        setAlarmResetDose(calendar.getTimeInMillis()); }

Este es el error que consigo:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.dex, PID: 28325
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dex/com.example.dex.MainActivity}: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
        at android.app.SharedPreferencesImpl.getInt(SharedPreferencesImpl.java:302)
        at com.example.dex.MainActivity.onCreate(MainActivity.java:92)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 

 
Lal:

Desde el error que ha publicado,

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

parece que el tipo de dosesTakenes Longno int. Por lo tanto, cuando se intenta obtener un número entero con el nombre dosesTaken, se generará un error.

Por lo tanto, para resolver el error, ya sea que cambiar

settings2.getInt("dosesTaken",dosesTaken);

a

settings2.getLong("dosesTaken",dosesTaken);

O

cambiar el tipo de dosesTakena int.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=235186&siteId=1
Recomendado
Clasificación