【问题标题】:I'm trying to store values from with a method to an object created earlier我正在尝试将值从方法存储到之前创建的对象
【发布时间】:2016-06-04 14:02:33
【问题描述】:

所以我对 java 和 android 还是比较陌生。我想弄清楚是否有一种方法可以将 SomeClass 内部方法中的 2 个值存储到一个对象中。

public class MainClass extends ...{

    Output outputObject = new Output();

    @Override
    protected void onCreate(Bundle savedInstanceState) {


        SomeClass classTask = new SomeClass(params) {
            @Override
            public void processFinish(String output) {
                outputObject.setVarOutput(output);
            }
        }
        classTask1.execute(link);




        SomeClass classTask2 = new SomeClass(params) {
            @Override
            public void processFinish(String output) {
                outputObject.setVar2Output(output);
            }
        }
        classTask2.execute(link2);


        // gather the outputObject values
        //for example
        result = outputObject.getVarOutput() + getVar2Output();
    }
    });

我尝试了一些方法无济于事。我不确定要寻找或进入什么。

【问题讨论】:

  • “收集输出对象”是什么意思?
  • 什么是 SomeClass?究竟想做什么?

标签: java android class scope external


【解决方案1】:

如果有一种方法可以将 SomeClass 方法内部的 2 个值存储到一个对象中。

是的。

很难说出为什么您提供的代码不适合您,因为您使用的名称非常抽象。我可以假设

execute()

会做一些计算,可能在不同的线程上。如果是这种情况,那么您要避免接触来自不同线程的同一个对象。

如果不了解您正在尝试做什么,我无法提供更好的建议。

【讨论】:

  • 该项目涉及将android应用程序连接到mysql数据库。 SomeClass 是为从数据库中提取而构建的类。我正在通过 processFinish 获得我正在寻找的结果,但我还没有弄清楚如何在课堂调用之外获得它。我已经尝试将调用移动到另一个为输出而设计的类调用。
  • execute 是执行我相信的 Async 类
  • 如果是这种情况,那么您的结果将不会达到您的预期,因为计算可能尚未完成,因此不会调用 processFinish()。您必须找到另一种方法来执行计算并获得结果。查看 AsyncTask 文档,了解您应该如何使用它。
  • 感谢您的帮助,我今天早上醒来时想到了解决方案。今天早上我意识到我可以将值存储在 sqlite 中。它会解决这个问题,然后也会解决其他一些问题。
【解决方案2】:

我的第一个想法是 execute() 没有按照预期的路径进行,并且没有按预期调用 processFinish()。不查看 SomeClass 的详细信息就无法确定。

其次,从长远来看,这不是线程安全的,因为同时调用 onCreate() 将导致两个线程同时尝试更新对象。不能保证你会得到什么,这是一个竞争条件,但你一提到数据库,我就竖起了耳朵。

现在,如果您将 outputObject 存储在线程本地存储中,那么至少并发性不是问题,但如果它不是与填充对象相同的线程读取,那也行不通。当然,您可以在 outputObject 上进行同步,这样您就可以在失去可伸缩性的情况下获得并发。

对我来说,最好的解决方案是您为每个 onCreate() 调用创建一个唯一的 outputObject 并找出一种将数据库获取到外部世界的方法(这可能不是必需的,因为您正在转储数据就在那儿)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多