0

抽象クラス Drill とそれを拡張する 4 つのクラス (addClass、divClass など) があります。Drill クラスは parcelable を実装します。これで、Result アクティビティにドリルの配列を渡す必要がある GamePlayActivity ができました。2 つのコンパイルの問題があります。関連するコードは次のとおりです。

ドリルクラス:

...
    public Drill(Parcel in) {
        readFromParcel(in);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // We just need to write each field into the
        // parcel. When we read from parcel, they
        // will come back in the same order
        dest.writeInt(firstNumber);
        dest.writeInt(secondNumber);
        dest.writeInt(answer);
        dest.writeInt(userAnswer);
        dest.writeString(userAnswerString);
        dest.writeString(symbol);
        dest.writeInt(minBound);
        dest.writeInt(maxBound);
        dest.writeInt(drillNumber);
    }

    /**
     *
     * Called from the constructor to create this
     * object from a parcel.
     *
     * @param in parcel from which to re-create object
     */
    protected void readFromParcel(Parcel in) {
        // We just need to read back each
        // field in the order that it was
        // written to the parcel
        firstNumber = in.readInt();
        secondNumber = in.readInt();
        answer = in.readInt();
        userAnswer = in.readInt();
        userAnswerString = in.readString();
        symbol = in.readString();
        minBound = in.readInt();
        maxBound = in.readInt();
    }

    public static final Parcelable.Creator<Drill> CREATOR = new Parcelable.Creator<Drill>() {
        public Drill createFromParcel(Parcel in) {
            return new Drill(in); // compilation error
        }

        public Drill[] newArray(int size) {
            return new Drill[size];
        }
    };

}

ここでのエラーは、Drill 呼び出しが抽象的であるためだと思います。

これが addDrill クラスです。他のクラスは同じように見えます。

package com.simplemathgame;

import android.os.Parcel;
import android.os.Parcelable;

public class AddDrill extends Drill {

    AddDrill(int min, int max) {
        super(min, max);
        symbol = "+";
        firstNumber = getRandomNumber(min, max);
        secondNumber = getRandomNumber(min, max);
        answer = answerCalculatetion();
    }

    private AddDrill(Parcel in) {
        super(in);
    }

    public void readFromParcel(Parcel in) {
        super.readFromParcel(in);
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        super.writeToParcel(out, flags);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    protected int answerCalculatetion() {
        return (this.getFirstNumber() + this.getSecondNumber());
    }
}

以下は、配列を渡すクラスである GamePlayClass です。

package com.simplemathgame;

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class GamePlayActivity extends Activity {
...

    Drill[] arrayOfDrills;
    int dIndex = 0;
...


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game_play);

        ...

        arrayOfDrills = new Drill[addDrills + subDrills + mulDrills + divDrills];

        ...

        finishButton.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {
            ...
                Intent resultsActivity = new Intent(GamePlayActivity.this, Results.class);
                resultsActivity.putExtra("drillArray", arrayOfDrills);
                startActivity(resultsActivity);
            }

        });
    }

    public static <T> void shuffle(T[] array) {
        for (int i = array.length; i > 1; i--) {
            T temp = array[i - 1];
            int randIx = (int) (Math.random() * i);
            array[i - 1] = array[randIx];
            array[randIx] = temp;
        }
    }
}

最後の部分は、配列を受け取る Result アクティビティです。

package com.simplemathgame;

import android.os.Bundle;
import android.app.Activity;

public class Results extends Activity {
    Drill[] arrayOfDrills;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);

        Bundle extras  = getIntent().getExtras();
        arrayOfDrills = extras.getParcelable("drillArray"); // compilation error
    }
}

ここでは、エラーが発生する理由がわかりません。

最初のコンパイル エラー: タイプ Drill をインスタンス化できません

2 番目のコンパイル エラー: タイプの不一致: Drill[]&Parcelable から Drill[] に変換できません

コードを修正するにはどうすればよいですか? ありがとう!

4

1 に答える 1

-1

ドリルクラスは抽象的ですか? 抽象クラスを開始することはできません;)

于 2013-11-12T13:45:37.250 に答える