当前位置: 首页 > 知识库问答 >
问题:

Android在Galaxy Note上的活动(单例)之间传递数据不起作用

墨寂弦
2023-03-14

我在Galaxy Note(gt-n7000)上遇到了一个问题。由于一些变化的需求,我似乎无法通过startActivity(intent)在两个活动之间直接传递数据。所以我实现了一个单例类:

public class IntentStack {
private static IntentStack instance;
private Map<String, Stack<Intent>> IntentMap = new HashMap<String, Stack<Intent>>();

    public synchronized static IntentStack getInstance() {
        if (instance == null) {
            instance = new IntentStack();
        }
        return instance;
    }

    private synchronized Stack<Intent> getStack(String key) {
        if (IntentMap.containsKey(key)) 
            return IntentMap.get(key);
        else 
            return null;
    }

    public synchronized Intent getTopIntent(String key) {
        if (IntentMap.containsKey(key)) {
            if (!getStack(key).isEmpty())
                return IntentMap.get(key).pop();
            else 
                return null;
        } else {
            return null;
        }
    }

    public synchronized void addIntent (String key, Intent intent) {
        Stack<Intent> newStack;
        if (IntentMap.containsKey(key)) {
            newStack = IntentMap.get(key);
        } else {
            newStack = new Stack<Intent>();
        }
        newStack.push(intent);
        IntentMap.put(key, newStack);
    }

    public synchronized void clearIntents(String key) {
        IntentMap.remove(key);
    }

}

在我的第一个活动中,我在IntentStack中放置了如下数据:

IntentStack.getInstance().addIntent(Core.getIm().getClassName("photobill"), takePictureIntent);

在我的第二个活动中,我试图达到一个目的:

Intent i = IntentStack.getInstance().getTopIntent(Core.getIm().getClassName("photobill"));

其中核心。getIm()。getClassName(string)从映射中获取其值,该映射在应用程序启动时初始化。

问题是Intent inull,但仅在Galaxy Note(gt-n7000)上。在其他手机上,代码正常工作。

什么可能导致这种行为?我该怎么做才能修复它?

共有1个答案

龚征
2023-03-14

Android不保证静态变量会保留其值。如果设备开始运行资源(内存)不足,它将“取消分配”静态变量。这可能是你的情况。

首先,我要添加登录

if (instance == null) {
   //ADD LOG HERE
   instance = new IntentStack();
}

查看您是否正在创建新实例。

 类似资料:
  • 假设我有一个列表活动,当你点击列表上的一个项目时,它会带你进入一个新的活动,其中包含该列表项目的更多详细信息。所有这些信息都是使用REST服务获取的。在我使用Reform将数据存储到一个对象中并将其存储到两个活动都可以访问的和单例类中之前,这样当选择一个列表项时,它只需要id并转到单例以获取正确的数据,然后在新活动中使用它。这是正确的Android实践吗?此外,我想知道是否最好让列表活动转到一个新

  • 我有两项活动。两者都已实现surfaceview。在第一个活动中,我有一个名为score1的变量,我想将score1中的值传递给第二个活动。 每次我运行应用程序时,它在完成第一个活动后崩溃,并尝试加载第二个活动。在我编写代码以获取第二个活动中的额外意图之前,一切都很好。 我的第一个活动有这样的意图: 在我的第二个活动中,以下代码试图获取score1变量的值: 我不明白为什么每次activity o

  • 我试图在我的android应用程序中的两个活动之间传递数据,我想使用HashMap(我不想使用Intent)。以下是我的代码: DataHolder.java 在第一个活动中设置值 在其他活动中获得价值 当我用它在activity1到activity2之间传递数据时,它会起作用,但在那之后,当在activity2到activity3之间传递数据时,返回null,因此强制转换为(整数)会导致错误。在

  • 我成功地尝试在三个活动之间传递数据。那就是: (数据3)活动1(数据1)- 现在的问题是: 我希望使用条件在这些活动之间传递数据。这是在Activity2中,在将数据发送到Activity3之前,我想检查一下 这是名为PickCard的Activity1的代码。Java语言 下面是Activity2 BuildWord的代码。Java语言 这是名为DropCard的Activity3的代码。Jav

  • 我正在尝试在活动之间传递数据 我使用intents在常规活动之间传递数据 请考虑以下代码:: 假设我将来自名为的其他活动的数据作为意图发送到 现在,如何接收中的数据,这些数据是从获得的,然后再将其传递到中 象形表示为:: {EDIT}--如果根据答案可以这样做--不明确,因为AndroidTabRestaurantDescearchListView是一个选项卡活动

  • 我有两个活动,它们应该使用意图相互传递数据。我不确定在哪里放置一些看跌期权和看跌期权。 对于Activity1(MainActivity),我有一个按钮,按下它会创建一个意向,然后将其放入Activity2,然后使用startActivity(意向)启动它。 然后在Activity2中,我使用getIntent在onCreate()函数中获取该信息。 现在我想做的是在Activity2中有一个按钮