无法在Android App中实例化类

时间:2013-10-25 00:00:27

标签: java android

我正在开发一款Android应用。在我的应用程序中,我将意图转移到另一个类。一旦发生这种情况,应用程序就会崩溃。它说它无法实例化我的课程。我的代码如下:

public class CustomObject extends Activity{
ArrayList<String> Alerts;
ArrayList<String> Names;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
Intent intent = getIntent();
Names = intent.getExtras().getStringArrayList("Names");
Alerts = intent.getExtras().getStringArrayList("Alerts");
}


public CustomObject(ArrayList<String> prop1, ArrayList<String> prop2) {
    this.Names = prop1;
    this.Alerts = prop2;
}

public ArrayList<String> getProp1() {
    return Names;
}

public ArrayList<String> getProp2() {
   return Alerts;
}
}

这是我的LogCat:

10-24 19:56:25.234: E/AndroidRuntime(12982): FATAL EXCEPTION: main
10-24 19:56:25.234: E/AndroidRuntime(12982): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.dev.chicagotraintracker/com.dev.chicagotraintracker.CustomObject}: java.lang.InstantiationException: can't instantiate class com.dev.chicagotraintracker.CustomObject; no empty constructor
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.os.Looper.loop(Looper.java:137)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.ActivityThread.main(ActivityThread.java:5103)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at java.lang.reflect.Method.invokeNative(Native Method)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at java.lang.reflect.Method.invoke(Method.java:525)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at dalvik.system.NativeStart.main(Native Method)
10-24 19:56:25.234: E/AndroidRuntime(12982): Caused by: java.lang.InstantiationException: can't instantiate class com.dev.chicagotraintracker.CustomObject; no empty constructor
10-24 19:56:25.234: E/AndroidRuntime(12982):    at java.lang.Class.newInstanceImpl(Native Method)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at java.lang.Class.newInstance(Class.java:1130)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
10-24 19:56:25.234: E/AndroidRuntime(12982):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
10-24 19:56:25.234: E/AndroidRuntime(12982):    ... 11 more

我在代码中找不到问题。其他一些问题已经提到了一些关于无参数构造函数的问题,但是我该如何实现呢?这甚至是我的问题吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

活动和碎片可能具有带参数(a.k.a.参数)的构造函数,如下所示:

public CustomObject(ArrayList<String> prop1, ArrayList<String> prop2) {
    this.Names = prop1;
    this.Alerts = prop2;
}

只允许没有参数的构造函数public CustomObject() {(根本不需要指定构造函数)

您必须使用String数组在Intent中传递该信息。请参阅putExtragetStringArrayExtra

要从其他活动创建此意图,您可以使用

Intent intent = new Intent(this, CustomObject.class);
intent.putExtra("prop1", arrayList.toArray(new String[arrayList.size()]));
intent.putExtra("prop2", arrayList2.toArray(new String[arrayList2.size()]));
startActivity(intent);

然后在您的Activity的onCreate方法中,您可以使用以下方法检索值:

Intent intent = getIntent();
List<String> list1 = new ArrayList<String>(Arrays.asList(intent.getStringArrayExtra("prop1")));
List<String> list2 = new ArrayList<String>(Arrays.asList(intent.getStringArrayExtra("prop2")));

因为不可能轻易地发送List一个意图,所以在这里它被转换为一个String数组,然后转回到onCreate方法中的List。

答案 1 :(得分:0)

继承Activity类或Fragment 必须 的类具有空构造函数。做一些阅读。

在您目前的情况下,您可能会尝试通过保留此有争议的构造函数并调用super()来解决它,请注意:这是空的超类构造函数调用。

我不喜欢这种做法。 Simon通过意图发送的解决方案是正确的方法。

答案 2 :(得分:0)

Activity需要一个非参数构造函数。现在,你添加了一个带有两个参数的构造函数。所以,你还应该添加一个非构造函数:

public CustomObject(){
}