Java 将字符串转换为hasthtable会产生NullPointerException
我正在编写一段代码,读取json格式的文件并将其转换为哈希表Java 将字符串转换为hasthtable会产生NullPointerException,java,nullpointerexception,hashtable,type-conversion,Java,Nullpointerexception,Hashtable,Type Conversion,我正在编写一段代码,读取json格式的文件并将其转换为哈希表 readBackInfo = gson.fromJson(readjsonString, fileInfoType); 然而,当我试图将字符串转换为哈希表时,我遇到了一个NullPointerException readBackInfo = gson.fromJson(readjsonString, fileInfoType); 这是我正在实现的代码 public void readSyncFile(){ String r
readBackInfo = gson.fromJson(readjsonString, fileInfoType);
然而,当我试图将字符串转换为哈希表时,我遇到了一个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();
}
}
public void readSyncFile(){
String readjsonString=null;
readBackInfo=newhashmap();
试一试{
FileInputStream fstream=新的FileInputStream(_dirName+“/。”+_dirName);
DataInputStream in=新的DataInputStream(fstream);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
弦斯特林;
而((strLine=br.readLine())!=null){
if(readjsonString==null){
readjsonString=strLine;
}否则{
readjsonString=readjsonString+“\n”+strLine;
}
}
in.close();
//System.out.println(readjsonString);
Type fileInfoType=newtypetoken(){}.getType();
System.out.println(allFiles.isEmpty());
//从下面的行中获取NullPointerException!
readBackInfo=gson.fromJson(readjsonString,fileInfoType);
sFileInToHashtable();
//readjsonString=gson.toJson(readBackInfo);
//System.out.println(readjsonString);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
您正在将readjsonString
初始化为null
,然后对其调用方法isEmpty()
。这就是抛出的NullPointerException
。请注意,null
与空字符串“
不同
如果希望readjsonString
以空开头,请使用String readjsonString=“”代码>
否则,您应该使用if(readjsonString==null)
我不知道你为什么会这样捕获NullPointerException
——这个异常永远不应该被捕获,因为它总是表示一个bug
编辑:我认为构建readjsonString
的逻辑中可能存在缺陷。请尝试以下操作:
String readjsonString = "";
...
while ((strLine = br.readLine()) != null) {
if(!readjsonString.isEmpty()){
readjsonString += "\n"; //append newline if it isn't the first line
}
readjsonString += strLine; //append line
}
或与:
您正在将readjsonString
初始化为null
,然后对其调用方法isEmpty()
。这就是抛出的NullPointerException
。请注意,null
与空字符串“
不同
如果希望readjsonString
以空开头,请使用String readjsonString=“”代码>
否则,您应该使用if(readjsonString==null)
我不知道你为什么会这样捕获NullPointerException
——这个异常永远不应该被捕获,因为它总是表示一个bug
编辑:我认为构建readjsonString
的逻辑中可能存在缺陷。请尝试以下操作:
String readjsonString = "";
...
while ((strLine = br.readLine()) != null) {
if(!readjsonString.isEmpty()){
readjsonString += "\n"; //append newline if it isn't the first line
}
readjsonString += strLine; //append line
}
或与:
嗯,是的。。。第一次访问readJsonString
是在您仅为其分配了null
值之后。实际上:
String readjsonString = null;
...
if(readjsonString.isEmpty())
为什么这不会引发异常?尝试:
if (readjsonString == null || readJsonString.isEmpty())
{
...
}
您绝对不应该在这里捕获NullPointerException
。是的。。。第一次访问readJsonString
是在您仅为其分配了null
值之后。实际上:
String readjsonString = null;
...
if(readjsonString.isEmpty())
为什么这不会引发异常?尝试:
if (readjsonString == null || readJsonString.isEmpty())
{
...
}
您绝对不应该在此处捕获NullPointerException
。以下各项之间没有设置readjsonString
:
String readjsonString = null;
以及:
因此,您捕获的第一个异常是预期的,而您所做的是而不是良好实践。如果readjsonString
预期为空(如此处所示),请检查该值
if (readjsonString == null) {
readjsonString = strLine;
} else {
...
}
如果你用它会更好——这就是它的用途
只有当gson
为空时,第二个NPE才会在那里发生。该变量未在您发布的内容中定义或设置,因此无法知道这是否可行
如果异常发生在fromJson
方法调用中,可能是因为您根本没有读取任何输入,因此readjsonString
仍然为空。因此,切换到StringBuilder并停止使用异常进行正常的流控制,您应该可以了
如果这不能解决您的问题,您将需要发布堆栈跟踪。没有任何设置readjsonString
:
String readjsonString = null;
以及:
因此,您捕获的第一个异常是预期的,而您所做的是而不是良好实践。如果readjsonString
预期为空(如此处所示),请检查该值
if (readjsonString == null) {
readjsonString = strLine;
} else {
...
}
如果你用它会更好——这就是它的用途
只有当gson
为空时,第二个NPE才会在那里发生。该变量未在您发布的内容中定义或设置,因此无法知道这是否可行
如果异常发生在fromJson
方法调用中,可能是因为您根本没有读取任何输入,因此readjsonString
仍然为空。因此,切换到StringBuilder并停止使用异常进行正常的流控制,您应该可以了
如果这不能解决您的问题,您将需要发布堆栈跟踪。noo不是这一部分,我知道我在那里得到了null pointerexception,我在询问行readBackInfo=gson.fromJson(readjsonString,fileInfoType)代码>不,不是那部分,我知道我在那里遇到了空点异常,我在询问行readBackInfo=gson.fromJson(readjsonString,fileInfoType)代码>不,不是那部分,我知道我在那里遇到了空点异常,我在问关于行readBac的问题