0

以下の問題は個別に説明されていますが、機能する解決策が見つかりませんでした。したがって、完全なストーリーと問題のリストを投稿します。
複数のアプリで使用する SDK (midlet jar) を作成しています。この SDK は、永続ストアを使用して特定のデータを保存します。
1. ストアにアクセスするためのキーが SDK にハードコードされています。複数のアプリが同じキー値でストアにアクセスしようとすると、競合の問題が発生します。
2. Persistable オブジェクトのパッケージ/クラス名が複数のアプリで同じです。このため、アプリの起動中に「Class Multiply defined」エラーが発生します。

2 については、以下のオプションを熟考してきましたが、いずれも問題を解決していないようです:
1. Vector などの標準オブジェクトを拡張せず、標準オブジェクトを使用します。
問題: データのリサイクルが失われ、競合が発生します。
2. ライブラリを使用するアプリケーションごとに一意の名前でライブラリを構築します。
問題: これは、使用したいすべてのクライアントに対して異なる SDK をリリースする必要があることを意味します。
3. 次のアプリのパッケージをロードする前に、Persistable オブジェクト クラスが既に存在するかどうかを確認します。
問題: 最初のパッケージがアンインストールされるとどうなりますか? クラスタイプは削除されますか?
4. Persistable インターフェイスを実装するようにアプリに依頼し、コールバックでキーを渡します。
永続ストアを使用できないという理由だけで、アプリにいくつかの値を渡すように要求するのは正しくないように思えます。

そのため、現在のところ、Persistable オブジェクトを使用する SDK は完全に壊れているようです。それとも、何か不足していますか?
タスクを達成するための他の代替提案も大歓迎です。

4

2 に答える 2

0

異なるアプリケーション間で機能を共有できるライブラリがある場合は、それをライブラリ cod ファイルとして作成し、依存プロジェクトのコンパイル時にこの cod ファイルをライブラリとして指定します。

たとえば、ライブラリ名が の場合、mylib_version1_00.codコンパイル後に他のプロジェクトに次のファイルが含まれる可能性があります。

Project1の場合:

  • project1.cod
  • mylib_version1_00.cod

Project2の場合:

  • project2.cod
  • mylib_version1_00.cod

……

ProjectNの場合:

  • projectN.cod
  • mylib_version1_00.cod

すべてのプロジェクトのインストール時にmylib.codファイルをインストールします。既にインストールされているmylib.codファイルがある場合は上書きされ、「クラス xxx 複数定義」を回避します。

このエラーは、すべてのアプリケーションが 1 つの JVM インスタンスで実行されているために発生します。そのため、既に存在する名前の cod ファイルをデバイスにアップロードすると、そのファイルは書き換えられます。

ライブラリの次のバージョンをリリースする場合は、cod ファイルに次の名前を付けます。

mylib_version2_00.cod

パッケージ名にバージョン番号を使用します。たとえば、次のようになります。

com.yourcompany.yourpoduct.yourlibary.version1

com.yourcompany.yourpoduct.yourlibary.version2

この場合、同じデバイスで cod ファイルを使用できます。mylib_version1_00.codまたmylib_version2_00.cod、「クラス xxx が複数定義されています」というエラーは発生しません。

次に持続性についてです。ライブラリに永続キーをハードコーディングしないでください。抽象クラスを作成し、次のような抽象メソッドを宣言します。

public long getPersistenceKey();

オブジェクトの一意の永続キーを返します。そして、抽象クラスの情報を永続化するコードでこのメソッド呼び出しを使用します。

カスタムアプリケーションで使用される子クラスでは、このメソッドを製品ごとに異なる値でオーバーライドするだけです。そして、もはや衝突はありません。

お役に立てれば。

于 2014-08-14T08:17:55.237 に答える
0

デバイス全体で、特定のクラス名を持つ持続可能クラスは 1 つだけ存在できます。永続化可能な同じクラスが 2 つのアプリにある場合、Class Multiply Defined 検証エラーが発生し、2 つ目のアプリはまったくインストールされません。

唯一の方法は、永続化可能なデータを SDK に保存するために組み込みの永続化クラスを使用することです。ただし、SDK を含むすべてのアプリがユーザーによって削除された場合でも、この永続データは削除されません。また、下位互換性を維持するために、データのバージョンに注意する必要があります。

Hashtable、IntHashtable、Vector などの組み込みクラスを使用してデータを保存します。次に、この情報を取得および設定するラッパー クラスを記述します。基本的に、永続化可能なクラスを Hashtable または Vector にマッピングします。

繰り返しになりますが、このデータストアには組み込みでないクラスを配置しないでください。そうしないと、アプリのアンインストール時にデータストアが削除されます。

それが役立つことを願っています。

于 2014-09-20T07:27:13.457 に答える