2016-07-28 38 views
0

我有一个简单的要求我有一个字符串数组,我在类级别声明,以便我可以在类中的任何地方使用它。如何访问从另一个方法初始化一个方法的字符串数组?

String image_url[];//Declared outside of any methods 

//Initailzed image_url[] to img_url[] 
public void showJSON(String json) 
    { 
     ParseJSON pj = new ParseJSON(json); 
     pj.parseJSON(); 

     image_url= ParseJSON.img_url; 
Toast.makeText(DisplayMagazine.this, "Image loc"+image_url[1], Toast.LENGTH_SHORT).show(); 
    } 

我想用IMAGE_URL数组中的下列方法: -

private ArrayList prepareData() { 


     ArrayList android_version = new ArrayList<>(); 

     for (int i = 0; i < magazine_version_names.length; i++) { 
      MagazineVersion magazineVersion = new MagazineVersion(); 
      magazineVersion.setMagazine_version_name(magazine_version_names[i]); 
      magazineVersion.setMagazine_image_url(image_url[i]); 
      android_version.add(magazineVersion); 
     } 
     return android_version; 
    } 

当我运行这段代码的应用程序崩溃与在这一行一个空指针异常: -

magazineVersion.setMagazine_image_url(image_url[i]); 

这是ParseJSON代码: -

public class ParseJSON 
{ 
    public static String[] magversion; 
    public static String[] img_url; 
    public static String[] download_url; 
    public static String[] sample_url; 
    public static String[] status_dl; 
    public static String[] status_sm; 
    public static String[] device_id; 

    public static final String JSON_ARRAY = "result"; 
    public static final String KEY_MAGVER = "magversion"; 
    public static final String KEY_IMGURL = "img_url"; 
    public static final String KEY_DOWNLOADURL = "download_url"; 
    public static final String KEY_SAMPLEURL = "sample_url"; 
    public static final String KEY_STATUS_DL ="status_dl"; 
    public static final String KEY_DEVICE_ID ="device_id"; 

    private JSONArray magazines = null; 

    private String json; 

    public ParseJSON(String json){ 
     this.json = json; 
    } 

    public void parseJSON(){ 
     JSONObject jsonObject=null; 
     try { 
      jsonObject = new JSONObject(json); 
      magazines = jsonObject.getJSONArray(JSON_ARRAY); 

      magversion = new String[magazines.length()]; 
      img_url = new String[magazines.length()]; 
      download_url = new String[magazines.length()]; 
      sample_url= new String[magazines.length()]; 
      status_dl= new String[magazines.length()]; 
      device_id= new String[magazines.length()]; 

      for(int i=0;i<magazines.length();i++){ 
       JSONObject jo = magazines.getJSONObject(i); 
       magversion[i] = jo.getString(KEY_MAGVER); 
       img_url[i] = jo.getString(KEY_IMGURL); 
       download_url[i] = jo.getString(KEY_DOWNLOADURL); 
       sample_url[i] = jo.getString(KEY_SAMPLEURL); 
       status_dl[i] = jo.getString(KEY_STATUS_DL); 
       device_id[i] = jo.getString(KEY_DEVICE_ID); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

我是新手编程,所以任何帮助或建议表示赞赏。谢谢。

+0

可以显示'ParseJSON(String)'构造函数吗? –

+0

[什么是NullPointerException,以及如何解决它?]可能重复(http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it ) –

+0

提示:理解字段是什么,以及它们与你的类的关系是**绝对必要的基本**东西。如果你不知道这些事情,最好让你的手指远离android编程。目前。重点是:不要试图学习java做android编程。首先学习java基础知识,然后转向Android。其他任何事情都会导致(可能很短)一系列非常令人沮丧的“为什么这不起作用”的体验。总之,因为你很快就会失去动力。 – GhostCat

回答

0

你的数组为null,如果你试图访问null数组的元素,它将抛出一个空指针而不是ArrayOutOfBound。

1

你数组没有初始化,所以我认为这就是为什么它给予空指针异常。尝试调试为什么数组为null。下面的代码片段可以帮助您执行场景。

public class Abc { 

    String image_url[]; 

    public void abc(){ 
     image_url = new String[] {"10","20","30"}; 
    }  

    public static void main(String[] args) { 

     Abc a = new Abc(); 
     a.abc(); 
     System.out.println(a.image_url[0]+" "+a.image_url[1]+" "+a.image_url[2]); 
    } 
//OutPut - 10 20 30 
} 
0

我们需要看到调用代码,调用顺序对您的情况非常重要!

您确定您在致电showJSON()之前拨打prepareData(),而不是之前?

相关问题