0

だから私はAndroidアプリを作っています、そして私は別のもの(ListViewと呼ばれるshowclients)にリンクするもの(と呼ばれる)を持っていますViewClient。がshowclients呼び出されると、他のJavaクラスから大量のデータを収集し、それをClientList(私が作成した)型のオブジェクトに格納します。

ViewClientその情報が必要であり、最初から取得するには時間がかかりすぎるため、typeshowclientsというpublic static変数を作成し、メソッドを作成しました...ClistClientList

public static ClientList returnobj(){
    return Clist;
}

戻ってViewClient私は電話した

ClientList grief= showclients.returnobj();

そしてそれは私にデータを取得します。なぜそれが機能するのか、AndroidなしでJavaで機能するのかどうかを知りたいです。

4

4 に答える 4

1

そのため、アクティビティ間でデータを共有する方法を尋ねています。1つのオプションは、アプリケーションクラスでデータモデルをホストすることです。を拡張するクラスを作成します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; }
}
于 2012-06-20T22:17:51.563 に答える
0

この正確なコードがJavaSEでコンパイルして実行することで機能するかどうかを尋ねる場合(つまり、「Androidなし」)、Java SEには使用するクラスがないため(など)、いいえActivity

Java SEのグラフィカルユーザーインターフェイスの場合、SwingSWTなどのライブラリが必要です。

データ転送の一般的なスキームがJavaSEで機能するかどうかを尋ねる場合は、そうです。その理由は、まさにあなたがstaticキーワードを使用しているからです。これは、静的「変数」(実際にはメンバー)と静的メソッドがクラス全体に対して定義されておりshowclients、特にそのオブジェクトのいずれに対しても定義されていないことを意味します。つまり、プログラムのどこでも、静的メンバーの値は同じでありreturnobj()、同じオブジェクトを返します。

キーワードがないと、クラス全体ではなく、作成するstaticオブジェクトごとに値が1回存在します。showclients

これが、ソリューションがAndroidで機能する理由の1つです。値が静的メンバーに保存されない場合は、実際のshowclientsオブジェクトを参照する必要があります。このオブジェクトは、他のアクティビティが表示されている間はいつでもメモリから削除される可能性があります(この場合、バックグラウンドアクティビティshowclientsはいつでも削除できます)。メンバーは静的であるため、Java仮想マシンによってロードされている限り、メンバーはハングしshowclientsます。これは、目的に応じて必要な長さです。

最後に、Jeffreyのソリューションは、専用のコードActivityに配置する必要がある追加機能の定義を悪用していないため、Androidコードにははるかに優れています。Java SEでは、シングルトンパターンを実装する新しいクラスを作成することで同様のソリューションを実装します。そして、実際には、Jeffreyの例では、アプリの目的のためのシングルトンです。MyApplication

于 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アプリケーションを作成してください(これが1つのアプリケーションです)

于 2012-06-20T22:35:35.877 に答える
0

あなたの問題は正確には何ですか?

「AndroidなしのJava」とはどういう意味ですか?ListView、ActivityなどはAndroid固有のものなので、私はノーと言います。

ただし、「コンセプト」はAndroidがなくても機能するはずです。->詳細を教えてください...

私見あなたの説明は少し不可解です...多分もう少しコードを投稿してください。

于 2012-06-20T22:16:33.420 に答える