1

私は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

コードに問題が見つかりません。他のいくつかの質問は、引数のないコンストラクターについて何か言っていますが、どうすればそれを実装できますか? それも私の問題ですか?ご協力ありがとうございました。

4

3 に答える 3

1

アクティビティとフラグメントには、次のようなパラメーター (別名、引数) を持つコンストラクターがない場合があります。

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

パラメーターのないコンストラクターのみが許可されpublic CustomObject() {ます (コンストラクターを指定する必要はまったくありません)。

IntentString 配列を使用してその情報を渡す必要があります。putExtraおよびgetStringArrayExtraを参照してください

このインテントを別のアクティビティから作成するには、次を使用できます

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

次に、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 に戻します。

于 2013-10-25T00:02:57.633 に答える
0

Class that inherit Activity class or Fragment MUST have empty constructor. Do some reading on this.

In your current situation you might try to workaround it by keeping this argumented constructor and call super(), note: this is empty super class constructor call.

I don't like this approach. Simon's solution by sending through intent is right way to do this.

于 2013-10-25T00:09:46.027 に答える
0

Activity needs a non-argument constructor.Now,you added a constructor with two arguments.So,you also should add a non-constructor:

public CustomObject(){
}
于 2013-10-25T00:12:49.900 に答える