Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 Can';不读取json文件_Java_Android_Json_Nullpointerexception - Fatal编程技术网

Java Can';不读取json文件

Java Can';不读取json文件,java,android,json,nullpointerexception,Java,Android,Json,Nullpointerexception,下面是我读取json文件的方法 private void LoadTabaksFromJson() { InputStream raw = mContext.getResources().openRawResource(R.raw.tabaks); Reader reader = new BufferedReader(new InputStreamReader(raw)); ListOfTabaks listOfTodos = new Gson().fromJson

下面是我读取json文件的方法

private void LoadTabaksFromJson() {

    InputStream raw = mContext.getResources().openRawResource(R.raw.tabaks);
    Reader reader = new BufferedReader(new InputStreamReader(raw));


    ListOfTabaks listOfTodos = new Gson().fromJson(reader, ListOfTabaks.class);
    List<Tabak> todoList = listOfTodos.getTodoArrayList();

    for (Tabak item: todoList){
        mDataBase.insert(TabakTable.NAME,null,getContentValues(item));
    }
}


public class ListOfTabaks {

    protected ArrayList<Tabak> tabakArrayList;

    public ArrayList<Tabak> getTodoArrayList(){
        return tabakArrayList;
    }
}

请将json文件放在资产文件夹中

使用AsyncTask防止类似ANR的情况

onBackground(){
    String json = null;
    try {
        InputStream stream = activity.getAssets().open("ur_json_file_in_assets_folder.json");
        int size = stream.available();
        byte[] buffer = new byte[size];
        stream.read(buffer);
        stream.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
    return json;
}
然后解析

onPostExecute(String str){
JsonObject object = new JsonObject(str);
JsonArray arr = object.getJsonArray("tabaksArrayList");
...}

有关详细信息,请参见

如果您没有初始化ArrayList,请尝试更改:

protected ArrayList<Tabak> tabakArrayList;
protectedarraylist tabakArrayList;
用于:

protectedarraylist tabakArrayList=newarraylist();

这看起来像是您的json模式问题,我猜
listOfTodos
返回null。您可以参考以生成模式

但有时这些工具会让我们感到困惑,所以我尝试手动创建模式,如下所示:

TabakRoot.java

public class TabakRoot {

@SerializedName("tabaksArrayList")
private List<TabakItem> tabakItem = null;

public List<TabakItem> getTabakItem() {
    return tabakItem;
}}
最后

TabakRoot listOfTodos = new Gson().fromJson(reader, TabakRoot.class);
List<TabakItem> todoList = listOfTodos.getTabakItem();
TabakRoot-listOfTodos=new Gson().fromJson(reader,TabakRoot.class);
List-todoList=listOfTodos.getTabakItem();

如果您没有初始化
tabakArrayList
,请按如下所示向列表中添加构造函数

public ListOfTabaks{
    tabakArrayList = new ArrayList<>();
}
公共列表数据库{
tabakArrayList=新的ArrayList();
}

您应该很好

第61行是哪一行?@Prashant可能是带有增强for loop61:for(Tabak item:todoList)的那一行{我知道由于列表的原因,有一个例外是空的,但为什么?可能是重复的
public class TabakItem {

@SerializedName("family")
@Expose
private String tabakFamily;

public String getTabakFamily() {
    return tabakFamily;
}}
TabakRoot listOfTodos = new Gson().fromJson(reader, TabakRoot.class);
List<TabakItem> todoList = listOfTodos.getTabakItem();
public ListOfTabaks{
    tabakArrayList = new ArrayList<>();
}