Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中创建新活动()时引发异常_Java_Android - Fatal编程技术网

在Java中创建新活动()时引发异常

在Java中创建新活动()时引发异常,java,android,Java,Android,当我的代码运行到此行时: Context context = new Activity().getApplicationContext(); 出现了一个例外: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 我尝试创建新句柄()并在其前面添加Looper.prepare(),但是它不起作用。查看抛出的异常,可能是在一个不扩展某种活动的类中请求

当我的代码运行到此行时:

Context context = new Activity().getApplicationContext();
出现了一个例外:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我尝试创建
新句柄()
并在其前面添加
Looper.prepare()
,但是它不起作用。

查看抛出的异常,可能是在一个不扩展某种活动的类中请求上下文

您可能需要在类的构造函数中传递上下文。见下面的例子

public class ExampleClass {
   private Context context;
   public ExampleClass(Context context) {
       this.context = context;
   }
}
在Activity类中,创建类并在其中传递上下文

public class mainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.example);
       ExampleClass exampleClass = new ExampleClass(getApplicationContext());

   }
}

android中的上下文不是抽象的东西。它是应用程序及其组件当前状态的真实上下文(或者您可以假设它是环境)

因此,您不应该仅仅为了使用“上下文”提供的功能而创建新的“上下文”实例。正确的方法是使用实际存在的上下文。这里有两种方法:

  • 使用现有组件的上下文-在大多数情况下,最好使用这种方式。任何子类化上下文的类都可以扮演这个角色。如果代码的该范围内没有可访问的上下文对象,则可以在方法调用或类构造函数中将其作为参数传递
  • 使用应用程序上下文-以下是如何从应用程序中的任何位置以静态方式访问应用程序上下文的示例。 此解决方案将解决您的问题,但在使用时也有值得考虑的问题

如果您正在运行一个需要上下文的方法,并且该方法正在从Activity扩展的类中运行,那么您可以通过为该Activity声明一个变量来获取该Activity的上下文,然后在onCreate方法中do->Activity=this

void onCreate(Bundle savedInstanceState)
{
 ....
 activity=this;
 ....
 }
i、 e

并且在onCreate do activity内=此

void onCreate(Bundle savedInstanceState)
{
 ....
 activity=this;
 ....
 }

现在在“activity”变量中有了当前活动的上下文。您可以在方法中使用它,也可以将其作为参数或任何您想要的内容传递。。。如果您使用的方法不在Activity类中,那么应该通过将此“Activity”变量传递给该方法来调用它。

您的实际需求是什么?我问这个是因为我觉得这段代码看起来很奇怪。在java类中运行函数时如何获取“上下文”?我从上面的代码中得到了这个错误。有没有其他方法来获取“上下文”?