Android解析Logcat上的嵌套JsonArray警告

Android解析Logcat上的嵌套JsonArray警告,android,json,android-listview,arrays,Android,Json,Android Listview,Arrays,我有一个类来解析嵌套的jsonarray。我已经能够显示json数据。这就是我解析嵌套json的方式 private static String DIV_ID = "DivisionID"; private static String DIV_NAME = "DivisionName"; private static String SUBDIV_ID = "SubDivisionID"; private static String SUBDIV_NAME = "SubDivisionName";

我有一个类来解析嵌套的jsonarray。我已经能够显示json数据。这就是我解析嵌套json的方式

private static String DIV_ID = "DivisionID";
private static String DIV_NAME = "DivisionName";
private static String SUBDIV_ID = "SubDivisionID";
private static String SUBDIV_NAME = "SubDivisionName";
private static String TAG_NOPOL = "Nopol";
private static String TAG_LOCATION = "Location";
private static String TAG_LONG = "LastLon";

public String getDivisionID() {
    return DIV_ID;
}
public void setDivID (String divisionId) {
    this.DIV_ID = divisionId;
}
public String getDivisionName()
{
    return DIV_NAME;
}
public void setDivName(String divisionName)
{
    this.DIV_NAME = divisionName;
}
public String getSubdivID() {
    return SUBDIV_ID;
}
public void setSubdivID(String subdivisionId) {
    this.SUBDIV_ID = subdivisionId;
}
public String getSubdivName() {
    return SUBDIV_NAME;
}
public void setSubdivName(String SubdivisionName) {
    this.SUBDIV_NAME = SubdivisionName;
}
public String getnoPol() {
    return TAG_NOPOL;
}
public void setnoPol (String nopol) {
    this.TAG_NOPOL = nopol;
}
public String getLocate() {
    return TAG_LOCATION;
}
public void setLocate(String location) {
    this.TAG_LOCATION = location;
}
public String getLastlon() {
    return TAG_LONG;
}
public void setLastlon(String lastlon) {
    this.TAG_LONG = lastlon; 
}

// JSON url
public static final String API_GET_VEHICLE = "http://example.com/";

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

    // ListView reference
    mLinearListView = (LinearLayout)findViewById(R.id.linear_listview);

    Log.d(TAG, "tes : " + Access.API_GET_VEHICLE);

    ArrayList<ItemList> mItemListArray=new ArrayList<ItemList>();
    pSubItemArrayList=new ArrayList<SubCategory>();
    pProductArrayList=new ArrayList<Product>();

    List<NameValuePair> params = new ArrayList<NameValuePair>();

    ServiceHandler sh = new ServiceHandler();

    // Making a request to url and getting response
    String jsonStr = sh.makeServiceCall(API_GET_VEHICLE , ServiceHandler.GET);

    // Check your log cat for JSON response
    Log.d("Vehicle JSON: ", "> " + jsonStr);


        try { 
        Divi = new JSONArray(jsonStr);
            // looping through All data
            for (int i = 0; i < Divi.length(); i++) {

                JSONObject c = Divi.getJSONObject(i);

                // Storing each json item values in variable
                setDivID(c.getString(DIV_ID));
                setDivName(c.getString(DIV_NAME)) ;

                SDiv = new JSONArray();
                //if (SDiv != null) {
                JSONArray SDiv = c.getJSONArray("SubDivision");
                for (int j=0; j<SDiv.length(); j++) {

                    JSONObject sub = SDiv.getJSONObject(j);

                    setSubdivID(sub.getString(SUBDIV_ID));
                    setSubdivName(sub.getString(SUBDIV_NAME));

                    Vehic = new JSONArray();
                    //if (Vehic != null) {
                    JSONArray Vehic = sub.getJSONArray("Vehicle");
                    for (int k=0; k<Vehic.length(); k++) 
                    {
                        JSONObject veh = Vehic.getJSONObject(k);

                        setnoPol(veh.getString(TAG_NOPOL));
                        setLocate(veh.getString(TAG_LOCATION));
                        setLastlon(veh.getString(TAG_LONG));
                }
                }
            }
    } catch (JSONException e) {
        Log.d("handle","JSONException Handled");
        e.printStackTrace();
    }

    pProductArrayList.add(new Product(getDivisionName(), pSubItemArrayList));
    pSubItemArrayList.add(new SubCategory(getSubdivName(), mItemListArray));
    mItemListArray.add(new ItemList(getnoPol(), getLocate(), getLastlon()));
    mItemListArray.add(new ItemList(getnoPol(), getLocate(), getLastlon()));

问题是您正在使用标记常量来设置内部的值

即:TAG_NOPOL将保存该字段的JSON键,该字段为“NOPOL”

稍后,在代码中,使用JSON中的值设置该标记的值

setnoPol(veh.getString(TAG_NOPOL))

如你所见:

public void setnoPol (String nopol) {
    this.TAG_NOPOL = nopol;
}
setnoPol()将值存储在标记变量中

注意
veh.getString(TAG_NOPOL)
这将导致==>
setnoPol(veh.getString(“00571564”)您将得到该错误

这是错误的。 标记将保存字段的键名,类中的另一个字段将保存该值

因此,下次您尝试使用TAG_NOPOL从jsonObject读取时,它将尝试在json中找到一个键为
00571564
的值,这是一个,因此您得到了错误

最佳实践是将密钥名(标记)定义为final

您需要有其他类成员来保存这些键的值。 因此,您可以使用标记常量读取jsonObject,并将其存储在适当的类成员中

您的类应该如下所示:

private static final String DIV_ID = "DivisionID";
private static final String DIV_NAME = "DivisionName";
private static final String SUBDIV_ID = "SubDivisionID";
private static final String SUBDIV_NAME = "SubDivisionName";
private static final String TAG_NOPOL = "Nopol";
private static final String TAG_LOCATION = "Location";
private static final String TAG_LONG = "LastLon";

//NO SETTERS GETTERS FOR TAG VALUES (THEY ARE FINAL)


private String divId = "";
private String divName = "";
private String subDivId = "";

//GETTERS AND SETTER HERE FOR THE variables above (Not for the TAG_xx)
public void setDivId(String id){
    this.divId = id;
}
:
:
:

你能发布完整的日志吗?你能发布你的JSON吗?
private static final String TAG_NOPOL = "Nopol";
private static final String DIV_ID = "DivisionID";
private static final String DIV_NAME = "DivisionName";
private static final String SUBDIV_ID = "SubDivisionID";
private static final String SUBDIV_NAME = "SubDivisionName";
private static final String TAG_NOPOL = "Nopol";
private static final String TAG_LOCATION = "Location";
private static final String TAG_LONG = "LastLon";

//NO SETTERS GETTERS FOR TAG VALUES (THEY ARE FINAL)


private String divId = "";
private String divName = "";
private String subDivId = "";

//GETTERS AND SETTER HERE FOR THE variables above (Not for the TAG_xx)
public void setDivId(String id){
    this.divId = id;
}
:
:
: