[英]Can't read json file
这是我读取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;
}
}
和Exeption
由以下原因引起的:java.lang.NullPointerException:尝试在com.hookah.roma.hookahmix.TabakLab.LoadTabaksFromJson(TabakLab.com上的空对象引用上调用接口方法'java.util.Iterator java.util.List.iterator()'。 com.hookah.roma.hookahmix.TabakLab。(TabakLab.java:32)的com.hookah.roma.hookahmix.TabakLab.get(TabakLab.java:37)的com.hookah.roma.hookahmix的java:61)。 android.support.v4.app.Fragment.performCreateView(Fragment.java:2184)上的com.hookah.roma.hookahoomix.TabakListFragment.onCreateView(TabakListFragment.java:32)上的TabakListFragment.updateUI(TabakListFragment.java:38) android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323)位于android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager)上的.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298)的.java:2136)
和json文件:
{
"tabaksArrayList":[
{
"name":"Абрикос",
"description":"Со вкусом Абрикоса",
"rating":"4.1",
"favourite":"1",
"family":"Al fakher"
},
{
"name":"Ананас",
"description":"Со вкусом Ананаса",
"rating":"4.1",
"favourite":"1",
"family":"Al fakher"
},
{
"name":"Апельсин",
"description":"Со вкусом Апельсина",
"rating":"4.1",
"favourite":"1",
"family":"Al fakher"
},
{
"name":"Апельсин с мятой",
"description":"Со вкусом Апельсина с мятой",
"rating":"4.1",
"favourite":"1",
"family":"Al fakher"
},
请把你的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");
...}
在ParseJsonFileAsync.java中有更多详细信息
看起来您没有初始化ArrayList,请尝试更改:
protected ArrayList<Tabak> tabakArrayList;
对于:
protected ArrayList<Tabak> tabakArrayList = new ArrayList<>();
看来您的JSON模式问题,我猜listOfTodos
返回null。 您可以参考此以生成您的架构。
但是有时候,这些工具会使我们感到困惑,所以我尝试像这样手动创建您的架构:
TabakRoot.java
public class TabakRoot {
@SerializedName("tabaksArrayList")
private List<TabakItem> tabakItem = null;
public List<TabakItem> getTabakItem() {
return tabakItem;
}}
TabakItem.java
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();
您没有初始化tabakArrayList
, tabakArrayList
将构造函数添加到ListOfTabaks中,如下所示
public ListOfTabaks{
tabakArrayList = new ArrayList<>();
}
你应该没事的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.