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”方法,我都会得到 NullPointerExceptions。这是这个问题的结果还是其他一些现在很明显的问题? 在您的问题中添加您的代码,我会检查并通知您 完成,如果您需要更多上下文,请告诉我。感谢您的所有帮助 在 SplashScreen 中调用 moveToGame() 之前是否添加了 setGameDir..? 答案是肯定的和否定的。我是,但我打算在其他地方删除一大块代码,这些代码重置了导致问题的loadInfo 对象。删除它,现在一切正常。非常感谢您的帮助【参考方案2】:

警告: Intent extra 的限制为 1Mb

要将信息从一个Activity 传递到另一个,通常使用额外的Intent,但它有1MB 的数据限制。在您的问题中,您使用的是 LoadInfo 类,我相信它可以轻松通过 1MB 的大小,因为它会加载游戏信息。

建议:您可以选择实现ApplicationService(即Bound Service)来存储LoadInfo的这个实例,您的所有活动都可以访问这个实例。

更多提示:您也可以使用Singleton 类来存储LoaderInfo 的这个实例,但您应该在关闭游戏的所有活动后将其删除。

Obs:闪屏为Activity,一定要记得从Back Stack中删除,否则用户点击返回时,会返回到闪屏Activity

【讨论】:

我会研究这些建议,因为我同意 LoadInfo 类也可以轻松通过 1MB。至于作为Activity 的启动画面,我在模拟器或物理设备中都没有遇到过这个问题。 你是对的,因为你正在使用act.finish();,这将破坏这个Activity,所以在Back Stack中删除它。

以上是关于Android:将信息从一个活动传递到另一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章

android - 将toast从一个活动传递到另一个活动

在Android中将一个对象从一个活动传递到另一个活动

将arraylist从一个活动发送到另一个活动到listview android [重复]

如何在 Android 上将对象从一个活动传递到另一个活动? [复制]

使用捆绑将数据从一个活动传递到另一个活动 - 不在第二个活动中显示

如何将数据从Main活动传递到另一个活动