当前位置: 首页 > 知识库问答 >
问题:

从其他类获取上下文导致NPE

葛兴发
2023-03-14

我试图使用以下代码调用非活动类中的新活动:

Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);
usage.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
UsageActivity.getContext().startActivity(usage);

我有一个UsageActivity,它有以下代码:

public static Context mContext;

在onCreate()下面

mContext = getBaseContext();

我创建了这样一个方法:

public static Context getContext() {
        return mContext;
    }

它抛出一个异常,说:

08-23 12:51:39.439:E/AndroidRuntime(15059):致命异常:main
08-23 12:51:39.439:E/AndroidRuntime(15059):java。lang.NullPointerException
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。所容纳之物组件名称。(ComponentName.java:75)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。所容纳之物意图(Intent.java:3301)
08-23 12:51:39.439:E/AndroidRuntime(15059):在ph.teligent。恩斯。更多经理。loadShowUsageView(MoreManager.java:673)
08-23 12:51:39.439:E/AndroidRuntime(15059):在ph.teligent。恩斯。更多莫尔维尤。onItemClick(MoreView.java:125)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。小装置。AdapterView。performItemClick(AdapterView.java:298)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。小装置。AblistView。performItemClick(AbsListView.java:1086)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。小装置。AbsListView$PerformClick。运行(AblistView.java:2859)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上运行。小装置。AbsListView 1美元。运行(AblistView.java:3533)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上运行。操作系统。汉德勒。handleCallback(Handler.java:615)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。操作系统。汉德勒。dispatchMessage(Handler.java:92)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。操作系统。活套。loop(Looper.java:137)
08-23 12:51:39.439:E/AndroidRuntime(15059):在android上。应用程序。活动线程。main(ActivityThread.java:4745)
08-23 12:51:39.439:E/AndroidRuntime(15059):在java。朗,反思一下。方法invokenactive(原生方法)
08-23 12:51:39.439:E/AndroidRuntime(15059):在java上。朗,反思一下。方法调用(Method.java:511)
08-23 12:51:39.439:E/AndroidRuntime(15059):在com上。Android内部的操作系统。ZygoteInit$MethodandArgscaler。运行(zyteinit.java:786)
08-23 12:51:39.439:E/AndroidRuntime(15059):在com上运行。Android内部的操作系统。合子体。main(zyteinit.java:553)
08-23 12:51:39.439:E/AndroidRuntime(15059):在dalvik。系统原生艺术。主要(本机方法

我创造环境的方式错了吗?任何想法都将受到高度赞赏。

共有3个答案

闾丘卓
2023-03-14

你不能“使用此代码调用非活动类中的新活动”!

必须在当前上下文中调用startActivity()。可以将当前上下文转换为非活动类as class字段。

霍永年
2023-03-14

我创造环境的方式错了吗?

是的,你正在使用一个从未存在过的上下文,获取基本上下文不是一个干净的方法:

 Intent usage = new Intent(UsageActivity.getContext(),UsageActivity.class);

因此,您应该将调用not Activity类的第一个活动上下文传递给not Activity类,然后使用该上下文启动第二个活动。

 Intent usage = new Intent(context,UsageActivity.class);
崔棋
2023-03-14

使用下面的代码

Intent i = new Intent(UsageActivity.getContext(),YourActivity.class);
            UsageActivity.getContext().startActivity(i);

McContext是您的活动上下文

还可以使用下面的onCreate()更新主活动中的代码

mContext = getBaseContext();

to 
mContext = UsageActivity.this;
 类似资料:
  • 我如何通过我自己的API从另一个API获取PDF,然后到前面供用户下载。 我现在得到的只是一张空白页。 后面是Scala的,当我打印文件时,我得到一个字符串。

  • 问题内容: 我需要在其他班上变数。我怎样才能做到这一点? 所以我尝试在Textcl.class中使用,但是得到了。 问题答案: 您将得到空值,因为inString从未按Robert Kilar在注释中正确指出的那样进行初始化。 您可以通过使用类名来引用静态变量。 示例ClassName.variablename。就你而言 运行您的主类。当您运行inString时,将在该类的构造函数中对其进行初始化

  • 嗨,我的android项目是 > 一个GPSTracker.java类,给出纬度和经度 从地址API获取JSON的远程etch.java类处于静态状态 一个MainActivity.java但是获取json的url是这样的: 私有静态最终字符串OPEN_WEATHER_MAP_API="http://api.openweathermap.org/data/2.5/weather?"q=%s 我的纬

  • 然后,我有一个名为的WebWorker文件,如下所示。 当我键入时,我会得到以下。 如果我从'rxjs/operators'注释掉

  • 因此,我有一个Project1与类A。我有Project2与类B。如何将类A导入到B,而不必在Project2等中创建一个新类。我知道这与构建路径有关,但是我如何添加,以便我可以编写类似于导入Project1/A;的东西?

  • 我用的是iTextSharp版。 对于我的项目,我需要使用pdfWriter将我的pdf文档复制到另一个pdf文档中。我不能使用pdfCopy或pdfStamper。 因此,在此操作期间,所有注释都会丢失。 首先,我开始寻找如何获得“铅笔注释绘图标记”的注释,如下图所示: 我找到了如何获取注释字典: 当循环解析我的注释时,annotName变量返回我的名字,所以我确定要解析我要查找的注释,但ann