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

时间:2015-10-22 09:14:13

标签: java android

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

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

抛出异常:

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

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

3 个答案:

答案 0 :(得分:1)

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

所以你不应该创建' context'的新实例。只是为了使用它提供的功能。正确的方法是使用实​​际的现有Context。这有两种方式:

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

答案 1 :(得分:0)

查看抛出的异常,您可能会要求某个类中的上下文不会扩展某种类型的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());

   }
}

答案 2 :(得分:0)

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

I,E

Activity activity;
//this is globally declared 

在onCreate里面做活动=这个;

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

现在你在“activity”变量中拥有当前活动的上下文。你可以在你的方法中使用它,或者将它作为参数或任何你想要的方式传递...如果你有不在的方法一个Activity类,然后你应该通过将这个“activity”变量传递给该方法来调用它。