Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串转换为hasthtable会产生NullPointerException_Java_Nullpointerexception_Hashtable_Type Conversion - Fatal编程技术网

Java 将字符串转换为hasthtable会产生NullPointerException

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

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

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的问题