【问题标题】:Can't read json file无法读取 json 文件
【发布时间】:2017-02-28 00:09:05
【问题描述】:

这是我读取 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;
    }
}

还有例外

原因:java.lang.NullPointerException:尝试调用接口 空对象上的方法'java.util.Iterator java.util.List.iterator()' 参考 在 com.hookah.roma.hookahmix.TabakLab.LoadTabaksFromJson(TabakLab.java:61) 在 com.hookah.roma.hookahmix.TabakLab.(TabakLab.java:32) 在 com.hookah.roma.hookahmix.TabakLab.get(TabakLab.java:37) 在 com.hookah.roma.hookahmix.TabakListFragment.updateUI(TabakListFragment.java:38) 在 com.hookah.roma.hookahmix.TabakListFragment.onCreateView(TabakListFragment.java:32) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:2184) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323) 在 android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.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"
    },

【问题讨论】:

标签: java android json nullpointerexception


【解决方案1】:

看起来像您的 json 架构问题,我猜 listOfTodos 返回 null。您可以参考this 来生成您的架构。

但有时这些工具会让我们感到困惑,所以我尝试像这样手动创建您的架构:

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();

【讨论】:

    【解决方案2】:

    看起来您没有初始化 ArrayList,请尝试更改:

    protected ArrayList<Tabak> tabakArrayList;
    

    为:

    protected ArrayList<Tabak> tabakArrayList = new ArrayList<>();
    

    【讨论】:

      【解决方案3】:

      请将您的 json 文件放入 assets 文件夹中

      使用 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

      【讨论】:

        【解决方案4】:

        你没有初始化tabakArrayList,添加一个构造函数到你的ListOfTabaks如下

        public ListOfTabaks{
            tabakArrayList = new ArrayList<>();
        }
        

        你应该没事的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-09
          • 2016-06-01
          • 1970-01-01
          • 2020-10-01
          • 2014-09-09
          • 2021-05-11
          • 2012-12-01
          • 2014-08-07
          相关资源
          最近更新 更多