我刚刚在我的游戏中完成了一些活动,现在我将开始将它们连接起来以使用真实的游戏数据,而不是我用来确保每个部分都有效的测试数据。由于多个活动需要访问此游戏数据,我开始研究将这些数据传递给我的活动的最佳方式。
我知道将 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);
}
}
// 我的测试 Activity 看它是否可以从上一个 Activity 访问数据及其之前的状态
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>
请帮我理解为什么这段代码会崩溃?
此外,如果您认为这只是让多个活动访问相同数据的错误方法,请提出您的建议。请记住,我说的是相当多的变量和一些大型数组。