【发布时间】:2015-05-19 05:42:01
【问题描述】:
我刚开始在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();
}
}
}
变量公司、类型和大小由用户传递。 请告诉我是否可以传递变量而不是字符串。 然后存储这些值以便在 textview 中显示它们。
这是 JSon 响应 -
[{"area":"29"},{"maggpie":"7890"},{"prize":"10000"},{"vintage":"6890"},{"15X10":" 375"}]
这是显示的异常 -
03-16 18:28:07.638: W/System.err(3344): org.json.JSONException:
maggpie 没有价值
03-16 18:28:07.648: W/System.err(3344): 在 org.json.JSONObject.get(JSONObject.java:355) 03-16 18:28:07.688: W/System.err(3344): 在 org.json.JSONObject.getString(JSONObject.java:515) 03-16 18:28:07.688: W/System.err(3344): 在 com.example.projectkitchennbathroom.Estimate.SaveData(Estimate.java:107) 03-16 18:28:07.688: W/System.err(3344): 在 com.example.projectkitchennbathroom.Estimate$RetreiveData.onPostExecute(Estimate.java:140) 03-16 18:28:07.708: W/System.err(3344): 在 com.example.projectkitchennbathroom.Estimate$RetreiveData.onPostExecute(Estimate.java:1) 03-16 18:28:07.708: W/System.err(3344): 在 android.os.AsyncTask.finish(AsyncTask.java:632) 03-16 18:28:07.708: W/System.err(3344): 在 android.os.AsyncTask.access$600(AsyncTask.java:177) 03-16 18:28:07.708: W/System.err(3344): 在 android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 03-16 18:28:07.708: W/System.err(3344): 在 android.os.Handler.dispatchMessage(Handler.java:102) 03-16 18:28:07.708: W/System.err(3344): 在 android.os.Looper.loop(Looper.java:136) 03-16 18:28:07.708: W/System.err(3344): 在 android.app.ActivityThread.main(ActivityThread.java:5017) 03-16 18:28:07.718: W/System.err(3344): 在 java.lang.reflect.Method.invokeNative(Native Method) 03-16 18:28:07.718: W/System.err(3344): 在 java.lang.reflect.Method.invoke(Method.java:515) 03-16 18:28:07.718: W/System.err(3344): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 03-16 18:28:07.718: W/System.err(3344): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 03-16 18:28:07.718: W/System.err(3344): 在 dalvik.system.NativeStart.main(Native Method) 03-16 18:28:07.718: W/System.err(3344): org.json.JSONException: 区域没有值
我不知道为什么它显示为 null,尽管值存在?
【问题讨论】:
-
这里忘了说变量 company,type,size 是用户输入的列名。这里提供的输入是 company="maggpie",type="vintage" 和 size="15X10"。
标签: java android json android-intent android-asynctask