どのようにしてアクティビティであるアンドロイドでクラスをインスタンス化するのですか?

androidでは、 Activity である class コンストラクタを作成するにはどうすればよいですか?

私の問題は、

両方のアクティビティクラス( CalculateFare )にデータを送信する2つのアクティビティクラス(estimateFareとMapping)が必要です。マッピングはリアルタイムのネットワーク情報からデータを取得しますが、estimateFareはユーザーの入力からデータを取得します。私は onCreate メソッドと CalculateFareのコンストラクタで問題が発生しましたが、どちらのクラスのデータも使用できるように CalculateFare 。アプリケーションの実行時にクラスが呼び出されると、 LogCat に次のメッセージが表示されます。

Unable to instantiate activity ComponentInfo. 

CalculateFareのスニペットは次のとおりです。

    public class CalculateFare extends Activity {
        TextView t;
        static long length;
        static int dist;
        static int mMonth;
        static int mDay;
        public static double fare;
        double rate1 = 0, rate2a, rate2b, rate3, rate4a, rate4b;
        int remDist = 0;
        double remLength;
        private static int TTS_DATA_CHECK = 1;
        private TextToSpeech tts = null;
        private boolean ttsIsInit = false;



public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fare);

}

public CalculateFare(long length, int dist, int mMonth, int mDay)
{
}

public static void setLength(long l)
{
    length = l;
}

public static void setDist(int d)
{
    dist = d;
}

public static void setDate(int m, int d)
{
    mMonth = m;
    mDay = d;
}

public void calc()
{

任意のアドバイスを高く評価

0

4 答え

アンドロイドでは、アクティビティでもあるクラスのコンストラクタを作成するにはどうすればよいですか?

あなたはしません。

両方ともアクティビティクラス(CalculateFare)にデータを送信する2つのアクティビティクラス(estimateFareとMapping)が必要です。

startActivity()以外では、これらのクラスは互いに触れ合うことはありません。 インテントエキストラを介して、または中央データモデル(データベースなど)を介してアクティビティ間でデータを渡します。

アプリケーションの実行時にクラスが呼び出されると、LogCatに次のメッセージが表示されます。

これは、コンストラクタを削除する必要があるためです。

2
追加された
onCreate には @Override が必要です
追加された 著者 NikkyD,
@ CommonsWareありがとう、多くの感謝:)
追加された 著者 Joe Murphy,

アクティビティではなくアクティビティ間で共有される別のクラスにデータを移動します。データは、ユーザーからのデータとネットワークからのデータに構造化することができます。たとえば、このスレッドを参照してください。アクティビティ間でデータを共有するアプローチ。

アクティビティが必要なときにフレームワークが別のインスタンスを作成するときに、アクティビティとなるCalculateFareオブジェクトをインスタンス化することは役に立ちません。

2
追加された
ありがとう、ありがとう:)
追加された 著者 Joe Murphy,

アクティビティ自体をインスタンス化して別のクラスのメソッドに渡そうとしました。私はOutOfMemoryErrorを持っています。だから、私はそのメソッドをActivity自身の中に入れ、それをこのオブジェクトとして渡しました。

0
追加された

アクティビティには、ユーザが定義したコンストラクタを持つことはできません。インテント作成を通じて間接的にしかインスタンス化することはできません。アクティビティ間でデータをやりとりする必要がある場合は、たとえば以下のように追加機能をバンドルに追加します。

bundle.putInt("dist",dist);

あなたはバンドルからデータを抽出することができます

int dist = bundle.getInt("dist");

アクティビティを開始する前にエキストラを置く:

Intent i = new Intent(this, CalculateFare.class);
Bundle b = new Bundle();

b.putInt("dist",dist);
i.putExtras(b);
startActivity(i);

onCreateメソッドで追加情報を読み込みます。

public void onCreate(Bundle savedInstanceState)
{
   super.onCreate(savedInstanceState);

   Bundle b = getIntent().getExtras();
   int dist;

   if (b != null)
   {
      dist = b.getInt("dist");
   }
}
0
追加された
はい。私はそれを私の答えに加えました。
追加された 著者 vitakot,
ちょっとありがとう:)私が持っているもう1つの質問は、私はonCreateメソッド内で検索ステートメントを作るべきですか?
追加された 著者 Joe Murphy,