9

このコードを DatastoreService で使用すると、ClassCastException Long acnnot be cast to integer in fromEntity が発生します。それは正常な動作ですか?(Eclipse用のGoogleプラグインを使用してローカルコンピューターでデバッグすると、この動作が発生します)

class UserData {
    private int _integerval = 0;
    private String _stringval = "";
    public Entity getEntity() {
        Entity ret = new Entity( "User", key );
        ret.setProperty( "property1", _integerval );
        ret.setProperty( "property2", _stringval );
        return ret;
    }

    public static UserData fromEntity( Entity ent ) {
        UserData ret = new UserData();
        ret._integerval = (Integer)ent.getProperty("property1");
        ret._stringval = (String)ent.getProperty("property2");
        return ret;
    }
}

次のように、常にこの例外をキャッチする必要がありますか?

try
{
    ret._integerval = (Integer)ent.getProperty("property1");
}
catch( ClassCastException ex ) {
    Long val = (Long)ent.getProperty("property1");
    ret._integerval = val.intValue(); 
}

それとも、すべての数値が長く保存されているのでしょうか? この例外を回避するには、_integerval タイプを long に変更する必要がありますか?

4

5 に答える 5

6

キャスト中intの代わりに使用してください。Integer

ret._integerval = (int)ent.getProperty("property1");

編集:

setPropertyAPIには以下が含まれています。

値はデータストアに格納されるため、データストアのネイティブタイプに変換されます。これには、ShortからLongへの変換などの拡大が含まれる場合があります。

したがって、intデータはデータストアのネイティブタイプとしてに変換されますLonglongまたはを使用してキャストしLongます。

于 2013-03-06T11:40:28.793 に答える
6

新しい Integer を作成します:

Integer property = new Integer(entity.getProperty("propertyKey").toString());
于 2013-06-16T15:53:15.273 に答える
1

intあなたのプログラムで使用したい場合、これはうまくいきます:

int i = (int) (long) entity.getProperty(propertyName);

数値が int-range (ここで説明) に入ることを確認してください。

于 2014-07-11T09:16:29.293 に答える
1

公式ドキュメントで報告されているように

値はデータストアに格納されるため、データストアのネイティブ型に変換されます。これには、Short を Long に変換するなどの拡張が含まれる場合があります。

そう

  • int として設定しますが、何らかの理由でローカル環境でのデータストアの動作が異なり、整数も格納するため、long にキャストします。
  • Long を取得して .intValue() を使用する

    public int get() {
        return ((Long) entity.getProperty(FIELD)).intValue(); 
    }
    
    public void set(int value) {
        entity.setProperty(FIELD, (long)value); 
    }
    
于 2014-12-09T13:42:14.313 に答える
0

整数値はLongとして保存されるため、アプリエンジンは常にLongを返します。私は混乱していましたが、これを見まし

于 2014-05-01T09:51:41.553 に答える