Java JSON无值异常以及如果用户输入列名,如何检索值

Java JSON无值异常以及如果用户输入列名,如何检索值,java,android,json,android-intent,android-asynctask,Java,Android,Json,Android Intent,Android Asynctask,我刚刚开始在android平台上开发,目前正在开发一个原型 我所做的是从在线数据库中检索数据 通过json,但列名由用户提供,即应检索数据的列的信息由用户提供 例如,在数据库中有三列-OptionA、OptionB、OPtionC,并且要检索其数据的列的名称由用户提供 这是我发送url的JSON代码- public JSONArray RetreiveData(String option,String vendorname,String company,String style,String c

我刚刚开始在android平台上开发,目前正在开发一个原型

我所做的是从在线数据库中检索数据 通过json,但列名由用户提供,即应检索数据的列的信息由用户提供 例如,在数据库中有三列-OptionA、OptionB、OPtionC,并且要检索其数据的列的名称由用户提供

这是我发送url的JSON代码-

public JSONArray RetreiveData(String option,String vendorname,String company,String style,String chimcompany,String shape,String size,String type,String category)
{
    // URL for getting all customers



    try {
        url = "http://piyushsharma.byethost16.com/retreivedata.php?option="+option+"&vendorname="+vendorname+"&company="+URLEncoder.encode(company,"UTF-8")+"&style="+style+"&chimcompany="+chimcompany+"&shape="+shape+"&size="+size+"&type="+type+"&category="+URLEncoder.encode(category,"UTF-8");
        Log.e("url",url);
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    // Get HttpResponse Object from url.
    // Get HttpEntity from Http Response Object

    HttpEntity httpEntity = null;

    try
    {

        DefaultHttpClient httpClient = new DefaultHttpClient();  // Default HttpClient
        HttpGet httpGet = new HttpGet(url);

        HttpResponse httpResponse = httpClient.execute(httpGet);

        httpEntity = httpResponse.getEntity();



    } catch (ClientProtocolException e) {

        // Signals error in http protocol
        e.printStackTrace();

        //Log Errors Here



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


    // Convert HttpEntity into JSON Array
    JSONArray jsonArray = null;

    if (httpEntity != null) {
        try {
            String entityResponse = EntityUtils.toString(httpEntity);

            Log.e("Entity Response  : ", entityResponse);

            jsonArray = new JSONArray(entityResponse);

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

    return jsonArray;


}
这是我用于检索数据的Json代码-

          public void SaveData(JSONArray jsonArray)
        {
         JSONObject json = null;
         sizeofarray=jsonArray.length();


          for(int i=0; i<=sizeofarray;i++){


                try {
                    json = jsonArray.getJSONObject(i);

                          Parea=json.getString("area");
                          Pbaskets=json.getString(company);
                          Prizechim=json.getString("prize");
                          Psnf=json.getString(type);
                          Ptile=json.getString(size);


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

            }  


 }
publicsvoidsavedata(JSONArray-JSONArray)
{
JSONObject json=null;
sizeofarray=jsonArray.length();

对于(int i=0;i,用户输入与JSON数组中存储的内容不匹配。这可能是由于用户输入的读取方式。您应该确认用户输入中没有隐藏字符

System.out.println("company.length() = " + company.length());
System.out.println("company = :" + company + ":");

我看不出提供的代码有什么问题。

json响应是一个json对象数组,而不是一个json对象

[{"area":"29"},{"maggpie":"7890"},{"prize":"10000"},{"vintage":"6890"},{"15X10":"375"}]
如果它是一个Json对象,它应该是这种格式

{"area":"29","maggpie":"7890","prize":"10000","vintage":"6890","15X10":"375"}
因此,要修复该异常,请获取json数组

JSONArray json = jsonArray.getJSONObject(i);

JSONObject area    = json.getJSONObject(0);
JSONObject company = json.getJSONObject(1);
JSONObject prize   = json.getJSONObject(2);
JSONObject type    = json.getJSONObject(3);
JSONObject size    = json.getJSONObject(4);

//* you can get variable key key for each one, but for your example
Parea=area.getString("area");
Pbaskets=company.getString("maggpie");
Prizechim=prize.getString("prize");
Psnf=type.getString("vintage");
Ptile=size.getString("15X10");

这里忘记提到变量company、type、size是用户输入的列名。这里提供的输入是company=“maggpie”、type=“vintage”和size=“15X10”。