addParentStack中的NameNotFoundException

时间:2016-06-26 21:59:04

标签: java android notifications package back-stack

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

public Card dealACard(){
    Card crd = null;
    if(nextCard > 0) { 
      nextCard--;
      crd = deck[nextCard];
    }

    return crd;
}

以下是我得到的例外情况。

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) 的包,但它都是正确的。 有人可以帮我排序这个。

2 个答案:

答案 0 :(得分:2)

片段不是组件,不能与Intent一起使用。只有ActivityServiceBroadcastReceiver等组件才能用于构建Intent

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

答案 1 :(得分:0)

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

您添加了片段的Activity代替了片段

样品

stackBuilder.addParentStack(MainActivity.class);