0

このアプリに問題があります:

https://play.google.com/store/apps/details?id=org.me.gp.project.holidays.countdown

私はこの報告を持っています。私の友人の電話とエミュレータでは、すべて問題ありません。以下のラポートとクラスに問題があります。4x2ウィジェットを担当するクラスです。

public class CountdownService extends Service {
public static final String UPDATE = "update";
public static final String PLUS = "plus";
public static final String MINUS = "minus";
public static final long  MODIFY= 86400000;
Bitmap bla[]=null;
 private static final int kDigitsViewIds[] = {
        R.id.bmp0,
        R.id.bmp1,

    };  

@Override
public void onStart(Intent intent, int startId) {
    if (bla==null){
        getDigits();
    }

    String command = intent.getAction();
    int appWidgetId = intent.getExtras().getInt(
            AppWidgetManager.EXTRA_APPWIDGET_ID);
    RemoteViews remoteView = new RemoteViews(getApplicationContext()
            .getPackageName(), R.layout.countdownwidget);
    AppWidgetManager appWidgetManager = AppWidgetManager
            .getInstance(getApplicationContext());
    SharedPreferences prefs = getApplicationContext().getSharedPreferences(
            "prefs", 0);
    int year = prefs.getInt("year", 0);
    int month =prefs.getInt("month", 0);
    int day = prefs.getInt("day", 0);

    //plus button pressed

    TimeZone tz = TimeZone.getTimeZone("GMT+1:00");
    Date date1 = new Date();
    //Calendar calendar = new GregorianCalendar(2012, 05, 8, 18 );
    Calendar calendar = new GregorianCalendar(year, month, day);
    calendar.setTimeZone(tz);
    long timme = calendar.getTimeInMillis() - date1.getTime();
    int d = (int) ((timme / 1000) / (3600*24));

    Bitmap[] bla = getDigits(); 

    String days=String.format("%02d", d);

String time = days;
char[] digits = time.toCharArray(); 

for (int i = 0; i <= 1; i++) {
    char c =digits[i];
    int a=Character.getNumericValue(c);
remoteView.setImageViewBitmap(kDigitsViewIds[i], bla[a]);

}   


    // apply changes to widget
    appWidgetManager.updateAppWidget(appWidgetId, remoteView);
    super.onStart(intent, startId);
}
public Bitmap[] getDigits(){
    if (bla == null){
        bla = prepareDigits();

        }
    return bla;
    }

@Override
public IBinder onBind(Intent arg0) {
    return null;
}

private Bitmap[] prepareDigits() {
    int index = 10;
    Bitmap[] bla = new Bitmap[index];
    for (int i = 0; i < index; i++) {
    bla[1] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit1);
    bla[2] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit2);
    bla[3] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit3);
    bla[4] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit4);
    bla[5] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit5);
    bla[6] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit6);
    bla[7] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit7);
    bla[8] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit8);
    bla[9] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit9);
    bla[0] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit0);
    }
    return bla;
}
 }

と報告:

java.lang.RuntimeException: Unable to start service       
org.me.gp.project.holidays.countdown.CountdownService@40520768 with Intent { act=update  
dat=countdownwidget://widget/id/26#update26 flg=0x4 
cmp=org.me.gp.project.holidays.countdown/.CountdownService (has extras) }: 
java.lang.ArrayIndexOutOfBoundsException
Caused by: java.lang.ArrayIndexOutOfBoundsException
at org.me.gp.project.holidays.countdown.CountdownService.onStart
(CountdownService.java:72)
at android.app.Service.onStartCommand(Service.java:428)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2115)

私は今、これで何が間違っていた

 int year = prefs.getInt("year", 0);
    int month =prefs.getInt("month", 0);
    int day = prefs.getInt("day", 0);

デフォルト値は 0 で、データは 0.0.0 でした。

4

1 に答える 1

0
private Bitmap[] prepareDigits() {
    int index = 10;
    Bitmap[] bla = new Bitmap[index];
    for (int i = 0; i < index; i++) {
        bla[1] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit1);
        bla[2] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit2);
        bla[3] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit3);
        bla[4] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit4);
        bla[5] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit5);
        bla[6] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit6);
        bla[7] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit7);
        bla[8] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit8);
        bla[9] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit9);
        bla[0] =(Bitmap) BitmapFactory.decodeResource(getResources(), R.drawable.digit0);
        }
        return bla;
    }
}

これは私にとって興味深いことです。サイズが10のビットマップ配列を作成してから10回ループし、10個のドローアブルを追加していますが、それは正しいですか?または、少なくとも、ループなしで実行し、bla[1] = ...行を維持することができます。もう1つの奇妙な点は、0ではなく配列インデックス1で要素を追加し始めていることです。

Bitmap[] bla = new Bitmap[index];
bla[0] = ((BitmapDrawable)getResources().getDrawable(R.drawable.digit0)).getBitmap();
bla[1] = ((BitmapDrawable)getResources().getDrawable(R.drawable.digit1)).getBitmap();
bla[2] = ((BitmapDrawable)getResources().getDrawable(R.drawable.digit2)).getBitmap();
// etc

個人的には、を使用する必要があると思いますList<Bitmap>。アレイは5年前のことです。

于 2012-05-16T18:15:24.953 に答える