• <small id='YAnpi'></small><noframes id='YAnpi'>

  • <tfoot id='YAnpi'></tfoot>
    • <bdo id='YAnpi'></bdo><ul id='YAnpi'></ul>

      1. <legend id='YAnpi'><style id='YAnpi'><dir id='YAnpi'><q id='YAnpi'></q></dir></style></legend>

      2. <i id='YAnpi'><tr id='YAnpi'><dt id='YAnpi'><q id='YAnpi'><span id='YAnpi'><b id='YAnpi'><form id='YAnpi'><ins id='YAnpi'></ins><ul id='YAnpi'></ul><sub id='YAnpi'></sub></form><legend id='YAnpi'></legend><bdo id='YAnpi'><pre id='YAnpi'><center id='YAnpi'></center></pre></bdo></b><th id='YAnpi'></th></span></q></dt></tr></i><div id='YAnpi'><tfoot id='YAnpi'></tfoot><dl id='YAnpi'><fieldset id='YAnpi'></fieldset></dl></div>

        如果我尝试启动服务,为什么会收到 InstantiationException?

        时间:2023-09-09

          <legend id='XpbpG'><style id='XpbpG'><dir id='XpbpG'><q id='XpbpG'></q></dir></style></legend>
              <tbody id='XpbpG'></tbody>

            <small id='XpbpG'></small><noframes id='XpbpG'>

            <i id='XpbpG'><tr id='XpbpG'><dt id='XpbpG'><q id='XpbpG'><span id='XpbpG'><b id='XpbpG'><form id='XpbpG'><ins id='XpbpG'></ins><ul id='XpbpG'></ul><sub id='XpbpG'></sub></form><legend id='XpbpG'></legend><bdo id='XpbpG'><pre id='XpbpG'><center id='XpbpG'></center></pre></bdo></b><th id='XpbpG'></th></span></q></dt></tr></i><div id='XpbpG'><tfoot id='XpbpG'></tfoot><dl id='XpbpG'><fieldset id='XpbpG'></fieldset></dl></div>
          • <tfoot id='XpbpG'></tfoot>

                <bdo id='XpbpG'></bdo><ul id='XpbpG'></ul>

                1. 本文介绍了如果我尝试启动服务,为什么会收到 InstantiationException?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  可能重复:
                  Android RuntimeException: 无法实例化服务

                  我整天都在尝试解决以下问题,但似乎没有任何效果.

                  I have been trying to fix the following problem all day but nothing seems to work.

                  我有一个小部件,它通过 IntentService 更新它的视图.但是在尝试启动此服务时,我不断收到 InstantiationException.下面是错误的堆栈跟踪和我用来启动服务的代码.我不相信我需要发布服务的代码,因为它甚至从未启动,但如果有人不这么认为,我当然会这样做.

                  I have a widget which gets it's views updated via an IntentService. But i keep getting an InstantiationException when trying to start this service. Below is the stack trace of the error and the code i use to launch the service. I don't believe i need to post the code of the service as it is never even started, but if someone thinks otherwise i will of course do so.

                  堆栈跟踪

                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163): FATAL EXCEPTION: main
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163): java.lang.RuntimeException: Unable to instantiate service syrligt.cashtrack.widgets.StatisticsWidgetUpdateService: java.lang.InstantiationException: syrligt.cashtrack.widgets.StatisticsWidgetUpdateService
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:1904)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.app.ActivityThread.access$2500(ActivityThread.java:117)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:982)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.os.Handler.dispatchMessage(Handler.java:99)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.os.Looper.loop(Looper.java:123)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.app.ActivityThread.main(ActivityThread.java:3647)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at java.lang.reflect.Method.invokeNative(Native Method)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at java.lang.reflect.Method.invoke(Method.java:507)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at dalvik.system.NativeStart.main(Native Method)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163): Caused by: java.lang.InstantiationException: syrligt.cashtrack.widgets.StatisticsWidgetUpdateService
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at java.lang.Class.newInstanceImpl(Native Method)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at java.lang.Class.newInstance(Class.java:1409)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     at android.app.ActivityThread.handleCreateService(ActivityThread.java:1901)
                  05-30 13:58:47.150: ERROR/AndroidRuntime(1163):     ... 10 more
                  

                  小部件代码

                   public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
                       for(int i = 0; i<appWidgetIds.length ; i++){
                           Intent intent = new Intent(context,StatisticsWidgetUpdateService.class);
                           intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
                           context.startService(intent);
                       }
                   }
                  

                  服务代码

                  public class StatisticsWidgetUpdateService extends IntentService {
                  
                  public StatisticsWidgetUpdateService(String name) {
                      super(name);
                  }
                  
                  @Override
                  protected void onHandleIntent(Intent intent) {
                      AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this);
                      int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
                      CashDB cdb = new CashDB(this);
                      cdb.open();
                  
                      RemoteViews updatedViews = new RemoteViews(getPackageName(), R.layout.statistics_widget);
                      updatedViews.removeAllViews(R.id.list);
                      PendingIntent pendingIntent = null;
                      Cursor c = null;
                      Intent i = null;
                      SharedPreferences sp = getSharedPreferences(Preferences.PREFERENCES, 0);
                  
                      double incomeAmount = cdb.sumTransactions(null, new TimeFrame(sp.getInt(Preferences.DEFAULT_TIME_FRAME, TimeFrame.ALL_TIME)), 1);
                      double expenseAmount = Math.abs(cdb.sumTransactions(null, new TimeFrame(sp.getInt(Preferences.DEFAULT_TIME_FRAME, TimeFrame.ALL_TIME)), -1));
                  
                      int value = StatisticsWidgetConfig.getConfig(this, appWidgetId);
                      c = cdb.fetchCategoriesWithSums(new TimeFrame(sp.getInt(Preferences.DEFAULT_TIME_FRAME, TimeFrame.ALL_TIME)), value, 3);
                  
                      updatedViews.setTextViewText(R.id.balance, StringConversion.formatAmount(incomeAmount - expenseAmount));//balance text
                      updatedViews.setViewVisibility(R.id.value_bar, incomeAmount - expenseAmount < 0 ? R.drawable.list_item_value_red_medium : R.drawable.list_item_value_green_medium);//value bar
                      updatedViews.setTextViewText(R.id.income, StringConversion.formatAmount(incomeAmount));//income text
                      updatedViews.setTextViewText(R.id.expense, StringConversion.formatAmount(expenseAmount));//expense text
                      updatedViews.setTextViewText(R.id.popularity, Integer.toString(cdb.fetchAllTransactions(new TimeFrame(sp.getInt(Preferences.DEFAULT_TIME_FRAME, TimeFrame.ALL_TIME)), null, null,null).getCount()));//popularity text
                  
                      for(int j = 0; j<c.getCount();j++){
                  
                          c.moveToPosition(j);
                          RemoteViews statisticsView = new RemoteViews(getPackageName(), R.layout.statistics_widget_list);
                  
                          statisticsView.setTextViewText(R.id.name, c.getString(c.getColumnIndexOrThrow(CashDB.CATEGORY_NAME)));//category name
                          statisticsView.setImageViewResource(R.id.icon, c.getInt(c.getColumnIndexOrThrow(CashDB.CATEGORY_IMAGE)));//category icon
                          statisticsView.setViewVisibility(R.id.starred, c.getInt(c.getColumnIndexOrThrow(CashDB.CATEGORY_STARRED)) == 1 ? View.VISIBLE : View.GONE);//starred icon
                  
                          double procent = c.getLong(c.getColumnIndexOrThrow(CashDB.TRANSACTION_SUM));
                          procent = procent/(value == -1 ? expenseAmount : incomeAmount);
                          procent = Math.abs(procent * 100);
                  
                          if((procent%1) < 0.1){
                               statisticsView.setTextViewText( R.id.procent, String.format("%.0f%s",procent," %"));//procentage
                          }else{
                               statisticsView.setTextViewText( R.id.procent, String.format("%.1f%s",procent," %"));//procentage
                          }
                  
                          Bitmap bmp;
                          if(value == -1){
                              bmp=BitmapFactory.decodeResource(getResources(), R.drawable.progress_bar_red);
                          }else{
                              bmp=BitmapFactory.decodeResource(getResources(), R.drawable.progress_bar_green);
                          }
                          int width=(int) (procent*4.056);  // kankse fuckar upp p andra display storlekar
                          if(width<2){
                              width=2;
                          }
                          width = (int) getResources().getDisplayMetrics().density * width;
                          int height=10;
                          Bitmap resizedbitmap=Bitmap.createScaledBitmap(bmp, width, height, true);
                          statisticsView.setImageViewBitmap(R.id.progress_bar, resizedbitmap);//procent bar
                  
                          i = new Intent(this, ViewCategory.class);
                          i.putExtra(CashDB.CATEGORY_ID, c.getLong(c.getColumnIndexOrThrow(CashDB.CATEGORY_ID)));
                          i.setAction("cashtrackViewCategory"+c.getLong(c.getColumnIndexOrThrow(CashDB.CATEGORY_ID)));
                          pendingIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
                          statisticsView.setOnClickPendingIntent(R.id.statistics_widget_list_layout, pendingIntent);
                          updatedViews.addView(R.id.list, statisticsView);
                  
                      }
                  
                      c.close();
                      cdb.close();
                      appWidgetManager.updateAppWidget(appWidgetId, updatedViews);
                  }
                  

                  }

                  推荐答案

                  你的服务需要有一个公共的无参数构造函数.否则,Android 将无法实例化它.

                  You service needs to have a public no-args constructor. Otherwize, Android will not be able to instantiate it.

                  所以替换

                  public StatisticsWidgetUpdateService(String name) {
                      super(name);
                  }
                  

                  public StatisticsWidgetUpdateService() {
                      super("SOME NAME");
                  }
                  

                  这篇关于如果我尝试启动服务,为什么会收到 InstantiationException?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:如何使 Android 搜索栏平滑移动? 下一篇:Android 小部件:RemoteViews 上的动画?

                  相关文章

                      <bdo id='Zi0Ju'></bdo><ul id='Zi0Ju'></ul>

                    1. <small id='Zi0Ju'></small><noframes id='Zi0Ju'>

                      <tfoot id='Zi0Ju'></tfoot>
                    2. <legend id='Zi0Ju'><style id='Zi0Ju'><dir id='Zi0Ju'><q id='Zi0Ju'></q></dir></style></legend>
                      <i id='Zi0Ju'><tr id='Zi0Ju'><dt id='Zi0Ju'><q id='Zi0Ju'><span id='Zi0Ju'><b id='Zi0Ju'><form id='Zi0Ju'><ins id='Zi0Ju'></ins><ul id='Zi0Ju'></ul><sub id='Zi0Ju'></sub></form><legend id='Zi0Ju'></legend><bdo id='Zi0Ju'><pre id='Zi0Ju'><center id='Zi0Ju'></center></pre></bdo></b><th id='Zi0Ju'></th></span></q></dt></tr></i><div id='Zi0Ju'><tfoot id='Zi0Ju'></tfoot><dl id='Zi0Ju'><fieldset id='Zi0Ju'></fieldset></dl></div>