java - 将字符串转换为 hashtable 会出现 NullPointerException

标签 java nullpointerexception hashtable type-conversion

我正在编写一段代码,读取 json 格式的文件并将其转换为哈希表。

但是,当我尝试将字符串转换为哈希表时,出现了 NullPointerException

readBackInfo = gson.fromJson(readjsonString, fileInfoType);

这是我正在实现的代码

public void readSyncFile(){
    String readjsonString = null;
    readBackInfo = new HashMap<String, ArrayList<String[]>>();
    try {
        FileInputStream fstream = new FileInputStream(_dirName+"/."+_dirName);
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;

        while ((strLine = br.readLine()) != null)   {
            if(readjsonString==null){
                readjsonString = strLine;
            } else {
                readjsonString = readjsonString + "\n" + strLine;
            }
        }
        in.close();
        //System.out.println(readjsonString);

        Type fileInfoType = new TypeToken<HashMap<String, ArrayList<String[]>>>() {}.getType();

        System.out.println(allFiles.isEmpty());

        //getting a NullPointerException from the line below!
        readBackInfo = gson.fromJson(readjsonString, fileInfoType);

        sFileInToHashtable();
        //readjsonString = gson.toJson(readBackInfo);
        //System.out.println(readjsonString);

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

最佳答案

没有在以下之间设置readjsonString:

String readjsonString = null;

和:

if(readjsonString.isEmpty()){

因此,您捕获的第一个异常是预料之中的,而您所做的根本不是好的做法。如果 readjsonString 预计为 null(正如此处所示),请检查这一点。

if (readjsonString == null) {
  readjsonString = strLine;
} else {
  ...
}

如果你使用 StringBuilder 就更好了- 这就是它的用途。

仅当 gson 为 null 时,第二个 NPE 才会恰好发生。该变量未在您发布的内容中定义或设置,因此无法知道这是否可能。

如果异常发生在 fromJson 方法调用内部,可能是因为您根本没有读取任何输入,因此 readjsonString 仍然会为空。因此,切换到 StringBuilder 并停止使用异常进行正常的流程控制,应该没问题。

如果这不能解决您的问题,您需要发布堆栈跟踪。

关于java - 将字符串转换为 hashtable 会出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453562/

相关文章:

java - 如何使用Spring Security阻止未经授权的用户?

java - java中计算两个int的平均值并转换为double

java - 在此示例中如何返回 Point

java - SQLiteDatabase .execSQL 期间的 Android java.lang.NullPointerException

javascript - 将数组添加到哈希表

java - 将 Facebook 图片上传到 imageview

java - 从 ColdFusion 调用 .jar

java - 什么是 NullPointerException,我该如何解决?

algorithm - 查找差值小于 K 的对,平均复杂度为 O(n)

python - 检查字典中键是否存在比在 Python 中捕获 KeyError 更好?