2015-03-04 3 views
0

У меня есть метод ниже в классе под названием Animals.javaNull Pointer метод Exception вызова в другом классе

public String loadJSONFromAsset() 

Я с целью повторного использования этого в моем файле AnimalInformation.java, или, возможно, в конце концов положить это в своем собственном файле .java, но когда я это сделал, у меня все же был тот же результат.

Для вызова этого я использую

Animals jsonLoader = new Animals(); 
try { 

     JSONArray mainNode = new JSONArray(jsonLoader.loadJSONFromAsset()); // call the connection to json 

     if(mainNode != null) //puts the values into an array 
     { 
      for(int i=0;i<mainNode.length();i++) 
      { 
       JSONObject eachObject = mainNode.getJSONObject(i); 

       String location = eachObject.getString("zooLocation"); 


      } 
     } 
    } 
    catch (JSONException e) 
    { 
     e.printStackTrace(); 
    } 

Так что я звоню метод в JSONArray, но я думаю, что здесь это вызывает исключения нулевого указателя.

03-04 15:31:52.700 1735-1735/com.myzooo.zoome E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.myzooo.zoome, PID: 1735 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myzooo.zoome/com.myzooo.zoome.AnimalInformation}: java.lang.NullPointerException 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5001) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
     at android.content.ContextWrapper.getAssets(ContextWrapper.java:83) 
     at com.myzooo.zoome.Animals.loadJSONFromAsset(Animals.java:177) 
     at com.myzooo.zoome.AnimalInformation.onCreate(AnimalInformation.java:28) 
     at android.app.Activity.performCreate(Activity.java:5231) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 


Любая помощь будет оценена, так как я немного потерял сейчас из-за того, как я пытаюсь использовать его, и я не совсем уверен, что это правильный способ пойти об этом. Спасибо.

Редактировать: loadJSONFromAssets() строка 177 - InputStream is = getAssets(). Open ("animals.json");

public String loadJSONFromAsset() { 

    StringBuilder stringBuilder = new StringBuilder(); 
    try { 
     InputStream is = getAssets().open("animals.json"); 
     BufferedReader bufferedReader = new BufferedReader(
       new InputStreamReader(is)); 

     String line; 
     while ((line = bufferedReader.readLine()) != null) { 
      stringBuilder.append(line); 
     } 

     bufferedReader.close(); 

     Log.d("X", "Response Ready:" + stringBuilder.toString()); 

     return stringBuilder.toString(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 
+4

Нам нужно будет увидеть «AnimalInformation» и многое другое из stacktrace, чтобы помочь. – Emmanuel

+0

HAve вы создали конструктор 'JSONArray' ** **, имеющий один параметр ** String **? – Apurva

+0

'jsonLoader.loadJSONFromAsset()', вы можете распечатать его раньше и посмотреть, что он возвращает? –

ответ

0

Проблема здесь:

InputStream is = getAssets().open("animals.json"); 

Вам нужен контекст для вызова getAssets() метод. Вы можете передать контекст для вашего метода loadJSONFromAsset() и изменить ваш код:

public String loadJSONFromAsset(Context ctxt) { 

    StringBuilder stringBuilder = new StringBuilder(); 
    try { 
     InputStream is = ctxt.getAssets().open("animals.json"); 
     ... 
0

getAssets() дает вам NullPointerException, потому что она возвращает нуль. его нужно вызвать в Контексте активности, поэтому просто поместите его туда и вызовите context.getAssets()