0

所以我正在制作一个 Android 应用程序,并且我有一个ListView(称为showclients)链接到另一个(称为ViewClient)。当showclients被调用时,它会从其他 java 类中收集一堆数据并将其存储在一个类型的对象中ClientList(我已经制作了)。

ViewClient需要该信息,并且再次从头开始获取它需要很长时间,所以showclients我创建了一个名为type的public static变量并创建了一个方法......ClistClientList

public static ClientList returnobj(){
    return Clist;
}

回来ViewClient我打电话

ClientList grief= showclients.returnobj();

它让我得到数据。我想知道为什么会这样,以及它是否可以在没有 Android 的情况下在 Java 上运行。

4

4 回答 4

1

所以你在问如何在活动之间共享数据。一种选择是将数据模型托管在应用程序类中。创建一个扩展的类Application

public MyApplication extends Application { ...

在您的清单中,添加您的应用程序类,

   <application
        android:name=".MyApplication"
        ...

类的生命周期Application允许您在那里托管数据。它超越了任何特定活动的开始/停止。将私有成员添加到您的MyApplication类中,并提供 getter 和 setter 来访问数据,

public MyApplication extends Application {
  private MyData myData;

  public MyData getMyData() { return myData; }
  public void setMyData(MyData data) { this.myData = data; }
}
于 2012-06-20T22:17:51.563 回答
0

如果你问这个确切的代码是否可以通过在 Java SE 上编译和运行(即“没有 Android”)来工作,那么没有,因为 Java SE 没有你使用的一些类(比如Activity)。

对于 Java SE 中的图形用户界面,您应该使用SwingSWT 之类的库。

如果您要询问传输数据的一般方案是否适用于 Java SE,那么是的,它会。原因正是您使用了static关键字。这意味着静态“变量”(实际上是一个成员)和静态方法是为整个showclients类定义的,而不是专门为它的任何对象定义的。这意味着在您的程序中的任何地方,静态成员的值都是相同的,并且returnobj()将返回相同的对象。

如果没有static关键字,则对于您创建的每个对象,该值将存在一次showclients,而不是整个类。

这就是您的解决方案适用于 Android 的原因之一 - 如果该值不会存储在静态成员中,您将不得不引用实际showclients对象,该对象可能会在您的其他活动显示时随时从内存中删除(因为showclients在这种情况下,可以随时删除后台 Activity )。因为该成员是静态的,所以只要showclients由 Java 虚拟机加载,它就会一直存在,对于您的目的而言,只要您需要。

最后,Jeffrey 的解决方案对于 Android 代码要好得多,因为您不会滥用Activity应该放在专用代码中的附加功能的定义。在 Java SE 中,您将通过创建一个实现单例模式的新类来实现类似的解决方案。而且,实际上,MyApplication在 Jeffrey 的示例中,您的应用程序是一个单例。

于 2012-06-20T22:34:27.117 回答
0

我想你是在问静态关键字?静态方法(或变量)直接绑定到类本身,而不是其特定实例。最好在示例中显示,但使用变量(不要以这种方式使用它,请阅读有关封装的信息):

class A {
  public static String foo = "foo";

  public A() {
    foo = "bar";
  }
}

class B {
  public void something() {
    // suppose print exists
    print(A.foo); // prints foo

    A a = new A();
    print(A.foo); // prints bar
    print(a.foo); // prints bar
  }
}

给自己做一些简单的java应用程序(这就是w

于 2012-06-20T22:35:35.877 回答
0

你的问题到底是什么?

什么是“没有 Android 的 Java”?由于 ListView、Activity 等是特定于 Android 的,我会说不。

但是您的“概念”应该/可以在没有 Android 的情况下工作。-> 请更多信息...

恕我直言,您的描述有点神秘……也许可以发布更多代码。

于 2012-06-20T22:16:33.420 回答