java.lang.String android.content.Context.getPackageName()'在null对象引用上

时间:2018-05-19 17:18:34

标签: android exception service widget android-context

在我的应用程序中,我检查片段是否可见。如果是,则应更新主屏幕。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if(isVisibleToUser){
        new UpdateNewsWidgetService().startBakingService(getActivity(),newsArrayList);
    }
}

但是我在这里得到了一个空指针异常

new UpdateNewsWidgetService().startBakingService(getActivity(),newsArrayList);

UpdateNewsWidgetService类是

public class UpdateNewsWidgetService extends IntentService {

ArrayList<News> newsArrayList = new ArrayList<>();


public UpdateNewsWidgetService() {
    super("UpdateNewsWidgetService");
}

public static void startBakingService(Context context, ArrayList<News> news) {
    Intent intent = new Intent(context, UpdateNewsWidgetService.class);
    intent.putExtra("news_list",news);
    context.startService(intent);
}

@Override
protected void onHandleIntent( Intent intent) {
    if (intent != null) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        Gson gson = new Gson();

        String json = prefs.getString("news", "");
        Type type = new TypeToken<ArrayList<News>>(){}.getType();
        newsArrayList = gson.fromJson(json, type);
        handleActionUpdateNewsWidget(newsArrayList);

    }
}

private void handleActionUpdateNewsWidget(ArrayList<News> newsArrayList){
    Intent intent = new Intent("android.appwidget.action.APPWIDGET_UPDATE2");
    intent.setAction("android.appwidget.action.APPWIDGET_UPDATE2");
    intent.putExtra("news_list", newsArrayList);
    sendBroadcast(intent);
}

}

所以基本上这一行会导致异常。

 Intent intent = new Intent(context, UpdateNewsWidgetService.class);

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

检查您的上下文是否为空。 您也可以尝试使用getContext()代替getActivity()