簡體   English   中英

函數內的類導致空指針異常

[英]Class inside a function causing null pointer exception

以下代碼在執行期間導致空指針異常。 它只是說了空指針異常。

當我將hotItem類放在函數之外時,它可以正常工作。

一旦將其放入函數中,將導致空指針異常。

我只想知道為什么會發生這種情況,以及函數內部類的生命周期是什么。

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();
    }
}

在這里檢查問題

解析度:

我猜您在類路徑上同時有gson.jar和gson-stream.jar; 那行不通。

問題在於,在Gson 2.1中,我們有一個自定義版本的JsonReader,它添加了一些秘密的掛鈎以使MapTypeAdatperFactory更快。 這些掛鈎不適用於gson-stream.jar的JsonReader版本。

我想我知道這里可能會發生什么。

問題在於HotItem是一個內部類,這意味着它對隱含類的實例具有隱式引用。 但是,當gsonAdapter.fromJson方法嘗試創建List<HotItem> ,它沒有(可能沒有)在其中創建HotItem的封閉類的實例。 根據創建方式的不同,它可能使用null引用創建它……這可能是NPE的原因。

如果這(或類似的問題)是問題,那么另一種解決方法是將HotItem聲明為static類。


我還應該指出,以小寫字母開頭的類名稱是錯誤的樣式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM