繁体   English   中英

在 Java 中创建新的 Activity() 时抛出异常

[英]Exception thrown when create new Activity() in Java

当我的代码运行到这一行时:

Context context = new Activity().getApplicationContext();

抛出异常:

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

我试图创建new Handle()并在它之前添加Looper.prepare() ,但是它不起作用。

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

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

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

查看抛出的异常,您有可能在不扩展某种类型的 Activity 的类中请求上下文。

您可能需要在类的构造函数中传递上下文。 请参阅下面的示例。

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());

   }
}

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

IE

Activity activity;
//this is globally declared 

在onCreate里面做activity=this;

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

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

暂无
暂无

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

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