2016-06-27 6 views
1

Ich versuche, aus einer JSON-Datei im Ordner "Assets" für ein Schulprojekt zu analysieren. Ich habe ein ähnliches Projekt gemacht, das funktioniert hat und ich habe keine Ahnung, warum es eine Null-Null-Wahrnehmung gibt. Ich verstehe, dass der Fehler darauf hinweist, dass ich versuche, die Größe aus einer Liste zu erhalten, dass es null ist, aber ich kann nicht sehen, wo ich versage. Ich schätze jede Hilfe in der Sache, das macht mich verrückt.NullPointerException beim Analysieren Json-Datei aus Assets Ordner

Ich habe einen MainActivity:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     NewsController newsController = new NewsController(); 
     List<RSSFeedCategory> rssFeedCategories = newsController.getRSSFeedCategoryList(this); 
     Integer rssFeedCategoryAmount = rssFeedCategories.size(); 
    } 
} 

ich ein Objekt RSSFeedCategory haben:

public class RSSFeedCategory { 
    private String categoryName; 
    private String objectId; 

    public RSSFeedCategory(String categoryName) { 
     this.categoryName = categoryName; 
    } 

    public String getCategoryName() { 
     return categoryName; 
    } 

    public String getObjectId() { 
     return objectId; 
    } 

    public void setCategoryName(String categoryName) { 
     this.categoryName = categoryName; 
    } 

    public void setObjectId(String objectId) { 
     this.objectId = objectId; 
    } 
} 

ich einen Objektbehälter RSSFeedCategoryContainer haben:

public class RSSFeedCategoryContainer { 

    private List<RSSFeedCategory> rssFeedCategoryList; 

    public void setRssFeedCategoryList(List<RSSFeedCategory> rssFeedCategoryList) { 
     this.rssFeedCategoryList = rssFeedCategoryList; 
    } 

    public List<RSSFeedCategory> getRssFeedCategoryList() { 

     return this.rssFeedCategoryList; 
    } 
} 

Ich habe einen Newscontroller:

public class NewsController { 
    public List<RSSFeedCategory> getRSSFeedCategoryList(Context context){ 
     NewsDAO newsDAO = new NewsDAO(); 
     return newsDAO.getRSSFeedCategoryList(context); 
    } 
} 

Ich habe einen GenericDAO:

public class GenericDAO { 
    public Object getObjectJSON(Context context, Class aClass, String fileName){ 

     Object object = null; 
     try{ 

      AssetManager manager = context.getAssets(); 
      InputStream inputStream = manager.open(fileName); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
      Gson gson = new Gson(); 
      object = gson.fromJson(bufferedReader, aClass); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 

     return object; 
    } 
} 

Und ich habe eine NewsDAO, die die GenericDAO erweitert:

public class NewsDAO extends GenericDAO { 
    public List<RSSFeedCategory> getRSSFeedCategoryList(Context context){ 
     RSSFeedCategoryContainer rssFeedCategoryContainer = (RSSFeedCategoryContainer) getObjectJSON(context,RSSFeedCategoryContainer.class,"RSSFeedCategory.json"); 

     return rssFeedCategoryContainer.getRssFeedCategoryList(); 
    } 
} 

Hier ist die RSSFeedCategory.json, die auf dem 'Assets' Ordner ist:

{ "results": [ 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Design", 
     "createdAt": "2015-02-03T08:55:30.775Z", 
     "objectId": "1ezmQEpd1i", 
     "updatedAt": "2015-02-03T08:55:30.775Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Technology", 
     "createdAt": "2015-02-03T08:55:29.894Z", 
     "objectId": "5dBaQy4wpf", 
     "updatedAt": "2015-02-03T08:55:29.894Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Music", 
     "createdAt": "2015-02-03T08:55:31.560Z", 
     "objectId": "73nctHMpkY", 
     "updatedAt": "2015-02-03T08:55:31.560Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Business", 
     "createdAt": "2015-02-03T08:55:30.465Z", 
     "objectId": "C4iDiuriB8", 
     "updatedAt": "2015-02-03T08:55:30.465Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Gadgets", 
     "createdAt": "2015-02-03T08:55:30.057Z", 
     "objectId": "FGTeskscsC", 
     "updatedAt": "2015-02-03T08:55:30.057Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Auto", 
     "createdAt": "2015-02-03T08:55:32.000Z", 
     "objectId": "J2YJqOxGIK", 
     "updatedAt": "2015-02-03T08:55:32.000Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Gaming", 
     "createdAt": "2015-02-03T08:55:31.405Z", 
     "objectId": "J4Oq3C7nxg", 
     "updatedAt": "2015-02-03T08:55:31.405Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Social", 
     "createdAt": "2015-02-03T08:55:32.170Z", 
     "objectId": "N6H0v01tCl", 
     "updatedAt": "2015-02-03T08:55:32.170Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Cooking", 
     "createdAt": "2015-02-03T08:55:31.849Z", 
     "objectId": "XzGdFekl2A", 
     "updatedAt": "2015-02-03T08:55:31.849Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Entertainment", 
     "createdAt": "2015-02-03T08:55:31.247Z", 
     "objectId": "Zk3DzKrF8k", 
     "updatedAt": "2015-02-03T08:55:31.247Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Fashion", 
     "createdAt": "2015-02-03T08:55:30.934Z", 
     "objectId": "ghJX0ATWfq", 
     "updatedAt": "2015-02-03T08:55:30.934Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Travel", 
     "createdAt": "2015-02-03T08:55:32.487Z", 
     "objectId": "hpPkcHkTTV", 
     "updatedAt": "2015-02-03T08:55:32.487Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Finance", 
     "createdAt": "2015-02-03T08:55:30.621Z", 
     "objectId": "nA3FO06l9z", 
     "updatedAt": "2015-02-03T08:55:30.621Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Photography", 
     "createdAt": "2015-02-03T08:55:31.087Z", 
     "objectId": "qC1VFzLgbF", 
     "updatedAt": "2015-02-03T08:55:31.087Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "News", 
     "createdAt": "2015-02-03T08:55:29.727Z", 
     "objectId": "uXFSxpJeDO", 
     "updatedAt": "2015-02-03T08:55:29.727Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Sports", 
     "createdAt": "2015-02-03T08:55:30.263Z", 
     "objectId": "yjHwfD1z3Y", 
     "updatedAt": "2015-02-03T08:55:30.263Z" 
    }, 
    { 
     "ACL": { 
      "*": { 
       "read": true 
      } 
     }, 
     "categoryName": "Humor", 
     "createdAt": "2015-02-03T08:55:32.320Z", 
     "objectId": "z8zyfeKhk7", 
     "updatedAt": "2015-02-03T08:55:32.320Z" 
    } 
] } 

Der Logcat-Fehler:

06-26 20:46:35.161 5957-5957/ar.com.thomas.parsetest E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: ar.com.thomas.parsetest, PID: 5957 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ar.com.thomas.parsetest/ar.com.thomas.parsetest.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
     at ar.com.thomas.parsetest.MainActivity.onCreate(MainActivity.java:17) 
     at android.app.Activity.performCreate(Activity.java:6237) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
     at android.app.ActivityThread.-wrap11(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:148)  
     at android.app.ActivityThread.main(ActivityThread.java:5417)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

Antwort

1

Alles, was Sie tun müssen, ist diese Anmerkung hinzuzufügen:

@SerializedName("results") 
private List<RSSFeedCategory> rssFeedCategoryList; 

zu Ihrem RSSFeedCategoryContainer. Ohne es kann Gson nicht richtig ein Array aus dem JSON auf das rssFeedCategoryList Feld

+0

zuordnen das ist die richtige Antwort. Ich liebe dich. Völlig verpasst, dass ich die "Ergebnisse" geändert habe. Ich habe das aufgewertet, aber ich habe noch nicht genug Reputation. Ich bin neu im Programmieren und habe den ganzen Tag damit verbracht, meinen Kopf zu verbrennen, Sachen zu machen und zu wiederholen. Danke vielmals!!! – Joey

+0

Sie sind willkommen – x0r