【问题标题】:How to access a String array initialized in one method from another method?如何从另一种方法访问以一种方法初始化的字符串数组?
【发布时间】:2016-07-28 11:27:59
【问题描述】:

我有一个简单的要求,我有一个在类级别声明的字符串数组,以便我可以在类中的任何地方使用它。

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

}

我是编程新手,因此感谢您提供任何帮助或建议。谢谢。

【问题讨论】:

  • 你能显示ParseJSON(String)构造函数吗?
  • 提示:了解什么是字段,以及它们与您的类的关系是绝对必要的基本内容。如果你不知道这些事情,你最好让你的手指远离 android 编程。目前。重点是:不要试图学java做android编程。先学习java基础,再转向Android。其他任何事情都会给您带来一系列(可能很短)非常令人沮丧的“为什么这不起作用”的体验。简短,因为你很快就会失去动力。
  • @JordiCastilla 请检查我更新的问题我已经添加了 ParseJson 类,这就是我的构造函数的样子:- public ParseJSON(String json){ this.json = json; }

标签: java android arrays nullpointerexception


【解决方案1】:

你的数组没有初始化,所以我认为这就是它给出空指针异常的原因。尝试调试为什么数组为空。下面的代码 sn-p 可帮助您执行该场景。

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 
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我们需要查看调用代码,调用顺序对您来说很重要!

      您确定是在调用showJSON() 之后而不是之前调用prepareData()

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 2020-06-16
        • 2015-06-15
        • 2011-06-16
        • 1970-01-01
        相关资源
        最近更新 更多