ゲームでいくつかのアクティビティを終えたばかりで、それぞれの部分が機能することを確認するためだけに使用していたテスト データの代わりに、実際のゲーム データを使用するために両方を接続し始めようとしていました。複数のアクティビティがこのゲーム データにアクセスする必要があるため、このデータを自分のアクティビティに渡す最善の方法を調査し始めました。
インテントで putExtra を使用することは知っていますが、私の GameData クラスには、単純なキーと値のペアだけでなく、かなりの量のデータが含まれています。かなりの数の基本的なデータ型に加えて、大きな配列もあります。キーとデータのペアだけでなく、オブジェクト全体を渡すことができない限り、すべてを渡そうとはしませんでした。
次の投稿を読んで、これでいいと思いましたが、これまでのところ、うまくいきませんでした。
この方法を試すために簡単なテスト アプリを作成しましたが、クラッシュし続け、私のコードは上記の投稿と同じように見えますが、名前を変更しました。これが私が得ているエラーです。誰かが私が間違っていることを理解するのを手伝ってくれますか?
12-23 00:50:49.762: エラー/AndroidRuntime(608): 原因: java.lang.ClassCastException: android.app.Application
次のステートメントでクラッシュします。
GameData newGameData = ((GameData)getApplicationContext());
これが私のコードです:
package mrk.examples.MainActivity;
import android.app.Application;
public class GameData extends Application {
private int intTest;
GameData () {
intTest = 0;
}
public int getIntTest(){
return intTest;
}
public void setIntTest(int value){
intTest = value;
}
}
// 私の主な活動
package mrk.examples.MainActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
int intLocal;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GameData newGameData = ((GameData) getApplicationContext());
newGameData.setIntTest(0);
intLocal = newGameData.getIntTest();
Log.d("MainActivity", "IntLocal = " + intLocal);
newGameData.setIntTest(1);
Log.d("MainActivity", "IntLocal = " + intLocal
+ " newGameData IntTest: " + newGameData.getIntTest());
Intent intentNew = new Intent(this, PassData2Activity.class);
startActivity(intentNew);
}
}
// 私のテスト アクティビティは、最後のアクティビティからデータとその前の状態にアクセスできるかどうかを確認します
package mrk.examples.MainActivity;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class PassData2Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GameData gamedataPass = ((GameData)getApplicationContext());
Log.d("PassData2Activity", "gamedatapass IntTest = " +
gamedataPass.getIntTest());
}
}
以下は、私のマニフェストの関連部分です。
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".PassData2Activity"></activity>
</application>
<application android:name=".GameData"
android:icon="@drawable/icon"
android:label="@string/app_name">
</application>
このコードがクラッシュする理由を理解してください。
また、複数のアクティビティが同じデータにアクセスできるようにするためのアプローチが間違っていると思われる場合は、提案をお願いします。かなりの数の変数といくつかの大きな配列について話していることに注意してください。