Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我试图用一个方法将值存储到先前创建的对象_Java_Android_Class_Scope_External - Fatal编程技术网

Java I';我试图用一个方法将值存储到先前创建的对象

Java I';我试图用一个方法将值存储到先前创建的对象,java,android,class,scope,external,Java,Android,Class,Scope,External,所以我对java和android还是比较陌生的。我试图找出是否有一种方法可以将SomeClass方法内部的2个值存储到对象 public class MainClass extends ...{ Output outputObject = new Output(); @Override protected void onCreate(Bundle savedInstanceState) { SomeClass classTask = new Som

所以我对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方法内部的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();
    }
    });

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

execute()
将进行一些计算,可能在不同的线程上。如果是这种情况,那么您希望避免从不同线程接触同一对象

如果我不知道你想做什么,我就不能给出更好的建议

如果有一种方法可以将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();
    }
    });

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

execute()
将进行一些计算,可能在不同的线程上。如果是这种情况,那么您希望避免从不同线程接触同一对象


如果不进一步了解您要做的事情,我就无法给出更好的建议。

我的第一个想法是execute()没有按预期的路径运行,processFinish()也没有按预期的方式调用。如果看不到某个类的详细信息,就无法确定

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

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


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

我的第一个想法是execute()不会沿着预期的路径运行,而processFinish()未按预期调用。如果看不到某个类的详细信息,就无法确定

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

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


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

您所说的“收集outputObject”是什么意思?什么是SomeClass?你到底想做什么?你说的“收集输出对象”是什么意思?什么是SomeClass?该项目包括将android应用程序连接到mysql数据库。SomeClass是为从数据库中提取而构建的类。我通过processFinish获得了我想要的结果,但我还没有找到如何在类调用之外获得它。我已尝试将调用移动到另一个为output设计的类调用。execute是执行异步类,我相信如果是这样,那么您的结果将不会达到预期效果,因为计算可能尚未完成,因此不会调用processFinish()。您必须找到另一种方法来执行计算并获得结果。查看AsyncTask文档,了解如何使用它。感谢您的帮助,我今天早上醒来时脑子里想着解决方案。今天早上我意识到我可以将值存储在sqlite中。该项目包括将android应用程序连接到mysql数据库。SomeClass是为从数据库中提取而构建的类。我通过processFinish获得了我想要的结果,但我还没有找到如何在类调用之外获得它。我已尝试将调用移动到另一个为output设计的类调用。execute是执行异步类,我相信如果是这样,那么您的结果将不会达到预期效果,因为计算可能尚未完成,因此不会调用processFinish()。您必须找到另一种方法来执行计算并获得结果。查看AsyncTask文档,了解如何使用它。感谢您的帮助,我今天早上醒来时脑子里想着解决方案。今天早上我意识到我可以将值存储在sqlite中。它将解决这个问题,然后解决其他一些问题。