Android:将信息从一个活动传递到另一个[重复]
Posted
技术标签:
【中文标题】Android:将信息从一个活动传递到另一个[重复]【英文标题】:Android: Pass information from one activity to another [duplicate] 【发布时间】:2018-01-13 14:23:39 【问题描述】:我正在尝试将信息(更具体地说是带有信息的类)从一个活动传递到另一个活动。在我的应用程序中,我有一个启动屏幕,负责加载和初始化变量。目标是将这些信息传递给实际游戏本身,以便可以使用它,但我不知道该怎么做。在我的初始屏幕类中,我有这个方法负责在加载所有内容后从初始屏幕移动到游戏:
private void moveToGame()
loop.setRunning(false);
act.startActivity(new Intent(splash, MainActivity.class));
act.finish();
return;
然后主活动类有这行代码来进入实际游戏:
setContentView(new Environment(this, this));
Environment
类的构造函数是Environment(Context context, Activity act)
目标是将构造函数更改为Environment(Context context, ActivityAct, LoadInfo li)
,但如何将信息一直传递给Environment
构造函数?
编辑 1 - LoadInfo 类
public class LoadInfo
private HashMap<String, Typeface> fonts;
private HashMap<String, Image> images;
private File logFile;
private File settingsFile;
private File gameDir;
public LoadInfo()
public LoadInfo(HashMap<String, Typeface> fonts, HashMap<String, Image> images, File logFile, File settingsFile, File gameDir)
this.fonts = fonts;
this.images = images;
this.logFile = logFile;
this.settingsFile = settingsFile;
this.gameDir = gameDir;
public HashMap<String, Typeface> getFonts()
return fonts;
public HashMap<String, Image> getImages()
return images;
public File getLogFile()
return logFile;
public File getSettingsFile()
return settingsFile;
public File getGameDir()
return gameDir;
public void setFonts(HashMap<String, Typeface> fonts)
this.fonts = fonts;
public void setImages(HashMap<String, Image> images)
this.images = images;
public void setLogFile(File logFile)
this.logFile = logFile;
public void setGameDir(File gameDir)
this.gameDir = gameDir;
public void setSettingsFile(File settingsFile)
this.settingsFile = settingsFile;
public boolean fullyLoaded()
return fonts != null && images != null && logFile != null && gameDir != null && settingsFile != null;
public String toString()
if(logFile == null)
return "well no file to load";
return logFile.toString();
【问题讨论】:
什么是LoadInfo ..? @MuthukrishnanRajendran 包含我想传递给Environment
的所有信息的类。例如,我将在 LoadInfo
中有一个看起来像 public int getValue()
的方法,然后返回在初始屏幕期间初始化的值
你能添加你有问题的 LoadInfo 类吗?
@MuthukrishnanRajendran 完成
我更新了答案。
【参考方案1】:
您可以像下面这样将您的 LoadInfo 设为 Serializable,
public class LoadInfo implements Serializable
// your code,
在您的 Splash Activity 中,您可以像这样发送,
//LoadInfo loadInfo = new LoadInfo(); this may be your loadInfo object
Intent intent = new Intent(act, MainActivity.class);
intent.putExtra("load_info", loadInfo); // Add your LoadInfo object here
act.startActivity(intent);
在你的 MainActvity 中你可以得到这样的,
LoadInfo loadInfo = (LoadInfo) getIntent().getSerializableExtra("load_info");
setContentView(new Environment(this, this, loadInfo));
【讨论】:
这似乎可行,但我收到一个错误,我不知道这是否是由此造成的。当我尝试调用loadInfo.toString()
时,我得到NullPointerException
,包括创建原始LoadInfo
类的初始屏幕类。事实上,即使我检查以确保对象(在本例中为 File
)不为空,但对于每个“get”方法,我都会得到 NullPointerException
s。这是这个问题的结果还是其他一些现在很明显的问题?
在您的问题中添加您的代码,我会检查并通知您
完成,如果您需要更多上下文,请告诉我。感谢您的所有帮助
在 SplashScreen 中调用 moveToGame() 之前是否添加了 setGameDir..?
答案是肯定的和否定的。我是,但我打算在其他地方删除一大块代码,这些代码重置了导致问题的loadInfo
对象。删除它,现在一切正常。非常感谢您的帮助【参考方案2】:
警告: Intent
extra 的限制为 1Mb:
要将信息从一个
Activity
传递到另一个,通常使用额外的Intent
,但它有1MB 的数据限制。在您的问题中,您使用的是LoadInfo
类,我相信它可以轻松通过 1MB 的大小,因为它会加载游戏信息。
建议:您可以选择实现Application
或Service
(即Bound Service
)来存储LoadInfo
的这个实例,您的所有活动都可以访问这个实例。
更多提示:您也可以使用Singleton
类来存储LoaderInfo
的这个实例,但您应该在关闭游戏的所有活动后将其删除。
Obs:闪屏为Activity
,一定要记得从Back Stack
中删除,否则用户点击返回时,会返回到闪屏Activity
。
【讨论】:
我会研究这些建议,因为我同意LoadInfo
类也可以轻松通过 1MB。至于作为Activity
的启动画面,我在模拟器或物理设备中都没有遇到过这个问题。
你是对的,因为你正在使用act.finish();
,这将破坏这个Activity
,所以在Back Stack
中删除它。以上是关于Android:将信息从一个活动传递到另一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将arraylist从一个活动发送到另一个活动到listview android [重复]
如何在 Android 上将对象从一个活动传递到另一个活动? [复制]