繁体   English   中英

addParentStack 中的 NameNotFoundException

[英]NameNotFoundException in addParentStack

我正在尝试构建一个通知并显示它,并为我正在显示的意图构建一个堆栈。 但我得到一个 NameNotFoundException。

Intent resultIntent = new Intent(mContext, ForecastFragment.class);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
stackBuilder.addParentStack(ForecastFragment.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.
                    getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager notificationManager =
                    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(10 ,mBuilder.build());

这是我得到的例外。

3541-3562/com.example.android.sunshine.app E/AndroidRuntime: FATAL EXCEPTION: SyncAdapterThread-1
          Process: com.example.android.sunshine.app, PID: 3541
          java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{com.example.android.sunshine.app/com.example.android.sunshine.app.ForecastFragment}
             at android.support.v4.app.TaskStackBuilder.addParentStack(TaskStackBuilder.java:247)
             at android.support.v4.app.TaskStackBuilder.addParentStack(TaskStackBuilder.java:226)
             at com.example.android.sunshine.app.sync.SunshineSyncAdapter.notifyWeather(SunshineSyncAdapter.java:526)
             at com.example.android.sunshine.app.sync.SunshineSyncAdapter.getWeatherDataFromJson(SunshineSyncAdapter.java:424)
             at com.example.android.sunshine.app.sync.SunshineSyncAdapter.onPerformSync(SunshineSyncAdapter.java:255)
             at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)
          Caused by: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{com.example.android.sunshine.app/com.example.android.sunshine.app.ForecastFragment}
             at android.app.ApplicationPackageManager.getActivityInfo(ApplicationPackageManager.java:314)
             at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:301)
             at android.support.v4.app.NavUtils.getParentActivityIntent(NavUtils.java:256)
             at android.support.v4.app.TaskStackBuilder.addParentStack(TaskStackBuilder.java:240)
             at android.support.v4.app.TaskStackBuilder.addParentStack(TaskStackBuilder.java:226) 
             at com.example.android.sunshine.app.sync.SunshineSyncAdapter.notifyWeather(SunshineSyncAdapter.java:526) 
             at com.example.android.sunshine.app.sync.SunshineSyncAdapter.getWeatherDataFromJson(SunshineSyncAdapter.java:424) 
             at com.example.android.sunshine.app.sync.SunshineSyncAdapter.onPerformSync(SunshineSyncAdapter.java:255) 
             at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:259)

我检查了包名称和放置类ForecastFragment的包,但都是正确的。 有人可以帮我整理一下这个。

Fragment 不是组件,不能与 Intent 一起使用。 只有诸如ActivityServiceBroadcastReceiver才能用于构建Intent

因此你的第一行( new Intent(mContext, ForecaseFragment.class) )和addParentStack(ForecastFragment.class)都是无效的。 您需要使用在包含该 Fragment 的清单中注册的Activity

TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
stackBuilder.addParentStack(ForecastFragment.class); // here give Activity name 

而不是片段,您附加片段的活动

样品

stackBuilder.addParentStack(MainActivity.class); 

你不应该在你的任务堆栈构建器中使用片段,因为片段不是像活动、服务等这样的组件。

您可以根据自己的意图传递一些可以识别通知片段的内容,然后导航到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM