Я только что закончил пару действий в своей игре, и теперь я собирался начать соединять их обоих, чтобы использовать реальные игровые данные вместо тестовых данных, которые я использовал, просто чтобы убедиться, что каждая часть работала.Поскольку нескольким Деятельностям потребуется доступ к этим игровым данным, я начал исследовать лучший способ передачи этих данных в Мои Деятельности.
Я знаю об использовании putExtra с намерениями, но мой класс GameData содержит довольно много данных ине просто пары ключ-значение.Помимо нескольких основных типов данных, он также имеет большие массивы.Я действительно не хотел пытаться передать все это, если только я не могу передать весь объект, а не просто пары ключ / данные.
Я прочитал следующий пост и подумал, что это будет путь,но до сих пор у меня не получилось.
Как объявить глобальные переменные в Android?
Я создал простое тестовое приложение, чтобы опробовать этот метод, но он продолжает падать, и мой код выглядит так же, как в посте выше - за исключением того, что я изменил имена.Вот ошибка, которую я получаю.Может кто-нибудь помочь мне понять, что я делаю неправильно?
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>
Пожалуйста, помогите мне понять, почему этот код падает?
Кроме того, если вы считаете, что это неправильный подход, позволяющий нескольким действиям иметь доступ к одним и тем же данным, просьба высказать свое мнение.Пожалуйста, имейте в виду, что я имею в виду довольно много переменных и несколько больших массивов.