繁体   English   中英

有关Java类对象和Android中从一个活动到另一个活动的数据传输的查询

[英]An inquiry regarding Java classes objects and data transfer from one activity to another in Android

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

ViewClient需要该信息,并且花费太长时间才能再次从头开始获取信息,因此在showclients我创建了一个名为ClistClientList类型的public static变量,并创建了一个方法...

public static ClientList returnobj(){
    return Clist;
}

回到ViewClient我打电话给

ClientList grief= showclients.returnobj();

它得到了我的数据。 我想知道为什么它能工作,以及是否可以在没有Android的Java上工作。

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

public MyApplication extends Application { ...

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

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

Application类的生命周期允许您在此处托管数据。 它超出了任何特定活动的开始/停止的范围。 将私有成员添加到MyApplication类,并提供获取器和设置器以访问数据,

public MyApplication extends Application {
  private MyData myData;

  public MyData getMyData() { return myData; }
  public void setMyData(MyData data) { this.myData = data; }
}

你到底是什么问题?

什么意思是“没有Android的Java”? 由于ListView,Activity等是特定于Android的,因此我拒绝。

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

恕我直言,您的描述有点含糊...也许会发布更多代码。

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

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

如果您要问通用的数据传输方案是否可以在Java SE上运行,那么可以 原因恰恰是您使用static关键字。 这意味着静态的“变量”(实际上是member )和静态方法是为整个showclients类定义的,而不是为其特定对象定义的。 这意味着在程序的任何地方,静态成员的值都是相同的,并且returnobj()将返回相同的对象。

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

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

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

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

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应用程序(就是

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM