0

Here's my method where im reading json file.

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;
    }
}

And Exeption

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference at com.hookah.roma.hookahmix.TabakLab.LoadTabaksFromJson(TabakLab.java:61) at com.hookah.roma.hookahmix.TabakLab.(TabakLab.java:32) at com.hookah.roma.hookahmix.TabakLab.get(TabakLab.java:37) at com.hookah.roma.hookahmix.TabakListFragment.updateUI(TabakListFragment.java:38) at com.hookah.roma.hookahmix.TabakListFragment.onCreateView(TabakListFragment.java:32) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2184) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1298) at android.support.v4.app.FragmentManagerImpl.moveFragmentsToInvisible(FragmentManager.java:2323) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2136)

And json file :

  {
  "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"
    },
Ahmed Ashour
  • 5,179
  • 10
  • 35
  • 56

4 Answers4

0

Please put your json file in assets folder

use AsyncTask to protect from ANR like situtation

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;
}

then parse in

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

more details at ParseJsonFileAsync.java

Ashish
  • 997
  • 6
  • 20
0

Looks like you are not initialising your ArrayList, try changing:

protected ArrayList<Tabak> tabakArrayList;

for:

protected ArrayList<Tabak> tabakArrayList = new ArrayList<>();
krlos77
  • 331
  • 5
  • 13
0

It looks like your json schema issue, i'm guessing listOfTodos return null. You can refer to this to generate your schema.

But sometimes that tools can make us confuse so i tried to create your schema manually like 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;
}}

finally

TabakRoot listOfTodos = new Gson().fromJson(reader, TabakRoot.class);
List<TabakItem> todoList = listOfTodos.getTabakItem();
Community
  • 1
  • 1
Amigoz
  • 39
  • 5
0

You're not initialising tabakArrayList, add a constructor to your ListOfTabaks as following

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

and you should be fine

Basil
  • 845
  • 9
  • 24