2014-11-23 1 views
0

단추에 의도를 첨부 할 위젯을 실행하면 어떻게됩니까? 의도는 현재 토스트를 만드는 서비스를 시작합니다. 내가 여러 번 확인했는데 IDE에 오류가없는 것으로 보이는 것이 잘못되었다는 것이 내 매니 페스트라고 생각하지 않습니다.App 위젯 공급자 충돌이 발생했습니다.

매니페스트 :

<service android:name=".Killer"></service> 

    <receiver android:name=".Provider"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/app_widget_info"/> 
    </receiver> 

AppWidget 공급자 :

public class Provider extends AppWidgetProvider{ 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
     // Perform this loop procedure for each App Widget that belongs to this provider 
     for (int i : appWidgetIds) { 
      int appWidgetId = appWidgetIds[i]; 

      // Create an Intent to launch Killer 
      Intent intent = new Intent(context, Killer.class); 

      // Get the layout for the App Widget and attach an on-click listener 
      // to the button 
      RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
      views.setRemoteAdapter(R.id.kill, intent); 

      // Tell the AppWidgetManager to perform an update on the current app widget 
      appWidgetManager.updateAppWidget(appWidgetId, views); 
     } 
    } 
} 

서비스 :

public class Killer extends Service{ 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 

    } 

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

로그 캣 오류 :

java.lang.RuntimeException: Unable to start receiver uk.co.clickcomputing.simpleappkillerwidget.Provider: java.lang.ArrayIndexOutOfBoundsException: length=1; index=111 
      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2674) 
      at android.app.ActivityThread.access$1800(ActivityThread.java:174) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1383) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5593) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=111 
      at uk.co.clickcomputing.simpleappkillerwidget.Provider.onUpdate(Provider.java:16) 
      at android.appwidget.AppWidgetProvider.onReceive(AppWidgetProvider.java:66) 
      at android.app.ActivityThread.handleReceiver(ActivityThread.java:2659) 
            at android.app.ActivityThread.access$1800(ActivityThread.java:174) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1383) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:146) 
            at android.app.ActivityThread.main(ActivityThread.java:5593) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
            at dalvik.system.NativeStart.main(Native Method) 

답변

0

바꾸기 :

for (int i : appWidgetIds) { 
     int appWidgetId = appWidgetIds[i]; 

으로 :

for (int appWidgetId : appWidgetIds) { 

하면, 사용자가 수집되지 배열 인덱스의 값이 반복되는 회수의 반복을위한 개선 된 for 구를 사용하는 경우.

+0

그러나 좋은 점은 – cheese12345

+0

@ cheese12345 오류를 해결하지 못합니다. 이것은 배열에 대한 유일한 액세스를 제거하고 배열에 액세스하지 않고는 'ArrayIndexOutOfBoundsException'을 가질 수 없습니다. * 다른 * 오류가있을 수 있지만 현재 코드가 어떤 모양인지 모르고 현재 예외가 무엇인지 알지 못하기 때문에 아무도 그걸 도와 줄 수 없습니다. – CommonsWare

관련 문제