我正在编写一段代码,读取 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/