如何正确扩展和使用应用程序



在我的应用程序中,我必须在活动中分享各种Java-Beans类。

为了做到这一点,我扩展了应用程序类,其中我创建了一个装有所有Java-Beans的标签。每个Java-Beans都有自己的钥匙。

示例代码:

public class MyApplication extends Application {
    public static final String CLASSROOM_KEY = "Classroom";
    private HashMap<String, Object> myObjects;
    @Override
    public void onCreate() {
        myObjects = new HashMap<String, Object>();
        myObjects.put(CLASSROOM_KEY, new Classroom());
    }
    public HashMap<String, Object> getMyObjects() {
        return myObjects;
    }
}

这在所有活动中都是可用的,这是可以的。但是,我有两个问题:

1)我还需要在非活动类中(例如Utils类)中获得myobjets,但是在这些类中,我无法进行" getApplicationContext()",因为它们不会扩展活动。

例如,从我的主要活动中,我开始服务(但它在正常类中),并且该服务调用查询又是在另一个普通类中。

查询需要一个MyObjects中的对象!

我认为我无法使myObjects公开静态。

2)在myapplication中,我必须提前创建所有我的Java beans。

如果将来我想创建一个新的教室对象,除了已经存在的对象外,该怎么办?我应该为此创建一个新键,但这是不可能的!

感谢您的帮助。

udpate

我更改了问题:

在此类中:

public class ClassroomUtils {
    private static String result = null;
    private static String studentObjectID = null;
    public static void queryClassroom(String UUID, final Classroom classroom) {
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Classroom");
        query.whereEqualTo("BeaconUUID", UUID);
        query.getFirstInBackground(new GetCallback<ParseObject>() {
            public void done(ParseObject object, ParseException e) {
                if (e == null) {                        
                    try {
                        result = object.getString("Label");
                    } catch(Exception e1){
                        System.out.println("Vuota");
                    }
                    if(result != null) {
                        Log.i("Classroom", "Retrieved " + result );
                        classroom.setClassroom(result);
                        sendNotification(result);
                        addStudentClassroomRelation(object);
                    }
                } else {
                    Log.e("Classroom", "Error: " + e.getMessage());
                }    
            }
        }); 
    }

我想避免将教室传递到此方法(从另一个普通类调用)。如何从此类访问全局对象?

我认为我无法使myObjects公开静态。

为什么不呢?myObjects在范围上已经有效地全局。从内存管理的角度来看,没有myObjectsApplicationprivate数据成员,从而没有什么可获得的。如果您希望Classroom成为Java Singleton,请这样做。您只需要像当前的实现一样观看内存管理。

在myapplication中,我必须提前创建所有我的Java-Beans

不,你不。

如果将来我想创建一个新的教室对象,除了已经存在的课堂对象怎么办?

然后创建另一个。也许正确的单例是School,它可以包含在Classroom对象的集合上。同样,您的主要近期问题是内存管理之一,因此您不会耗尽内存,因为您一直试图将这些对象保留在所有时间周围。

1)我还需要在非活动类中(例如Utils类)中获得myobjets,但是在这些类中,我无法进行" getApplicationContext()",因为它们不会扩展活动。

我认为,

最好的方法是将MyApplication类创建为单身人士。您可以通过调用GetInstance和属性的相应Getter/Setter从任何地方检索数据。

简短示例:

public class MyApplication extends Application {
    private static MyApplication mInstance;
    public MyApplication getInstance(){
        // this means you have only one existing instance of this class.
        if(mInstance == null){
            // set the context to this MyApplication instance
            mInstance = this;
        }
        // return the instance of this class
        return mInstance;
    }
    // here your stuff for MyApplication
    public HashMap<String, Object> getMyObjects() {
        return myObjects;
    }
}

然后,您可以从其他类别中调用它:

public class CFoo{
    public CFoo(){
        //retrieve myObjects from MyApplication
        MyApplication.getInstance().getMyObjects();
    }
}

相关内容

  • 没有找到相关文章