0

次のコードでは、実行中に null ポインター例外が発生します。ヌルポインタ例外と言っただけです。

hotItem クラスを関数の外に置くと、問題なく動作します。

関数に入れると、null ポインター例外が発生します。

なぜこれが起こるのか、そして関数内のクラスのライフサイクルは何なのか知りたいだけです。

private void getHotItem()
{   
    Gson gsonAdapter = new Gson();
    class hotItem
    {
        private String hotItemPK = ""; 
    }
    Type hotItemType = new TypeToken<List<hotItem>>(){}.getType();
    List<hotItem> hotItemList = new ArrayList<hotItem>();

    try
    {
        itemAccess.getHotItemList();
        itemAccess.start();
        itemAccess.join();
        hotItemList = gsonAdapter.fromJson(returnData, hotItemType);

        if(!hotItemList.isEmpty())
        {
            testText.setText(hotItemList.get(0).hotItemPK.toString());
        }
    }
    catch (InterruptedException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

2 に答える 2

0

ここで何が起こっているのか理解できたと思います。

問題は、それHotItemが内部クラスであることです。つまり、それは、囲んでいるクラスのインスタンスへの暗黙的な参照を持っていることを意味します。しかし、gsonAdapter.fromJsonメソッドが を作成しようとするとList<HotItem>HotItem. 作成方法によっては、参照を使用して作成している可能性があり、それがnullNPE の原因である可能性があります。

これ(または同様のもの)が問題である場合、別の解決策はクラスであると宣言HotItemすることです。static


また、クラス名を小文字で始めるのは BAD STYLE であることも指摘しておきます。

于 2012-09-26T11:23:40.673 に答える
0

ここで問題を確認してください

解像度:

クラスパスに gson.jar と gson-stream.jar の両方があると思います。それはうまくいきません。

問題は、Gson 2.1 には、MapTypeAdatperFactory を高速化するためにいくつかの秘密のフックを追加する JsonReader のカスタム バージョンがあることです。これらのフックは、gson-stream.jar のバージョンの JsonReader では機能しません。

于 2012-09-26T10:22:13.370 に答える