当前位置: 首页 > 面试题库 >

解析数据org.json.JSONException时出错:在字符0的输入结束

司寇照
2023-03-14
问题内容

解析JSON时出现错误。解析数据org.json.JSONException时出错:输入的第0个字符。

错误日志:

04-19 20:51:00.635: E/ViewRootImpl(24857): sendUserActionEvent() mView == null
04-19 20:51:00.635: E/ViewRootImpl(24857): sendUserActionEvent() mView == null
04-19 20:51:03.320: E/ViewRootImpl(24857): sendUserActionEvent() mView == null
04-19 20:51:10.215: E/JSON Parser(24857): Error parsing data org.json.JSONException: End of input at character 0 of 
04-19 20:51:35.600: E/ViewRootImpl(24857): sendUserActionEvent() mView == null

这是在UserFunction类中调用函数的代码:

    pTotalPrice=new double[cartSize]; // store array of totalprice

    /** To be sent to DB **/
    sPID = new String[cartSize];
    sProduct = new String[cartSize];
    sQuantity = new String[cartSize];
    sTotalPrice = new String[cartSize];

    if(cartSize >0)
    {
        for(int i=0;i<cartSize;i++)
        {   
            final int counter = i;
            // Get probuct data from product data arraylist
            String pID = aController.getProducts(i).getProductId();
            sPID[i] = pID;
            String pName = aController.getProducts(i).getProductName();
            sProduct[i] = pName;
            double pPrice   = aController.getProducts(i).getProductPrice();
            int pQuantity   = aController.getProducts(i).getProductQuantity();
            sQuantity[i] = Integer.toString(pQuantity);
            pTotalPrice[i] = pPrice * pQuantity;
            sTotalPrice[i] = Double.toString(pTotalPrice[i]); 
            }
    pFinalPrice -= pTotalPrice[counter];
sFinalPrice = Double.toString(pFinalPrice);
    }      
    protected JSONObject doInBackground(String... args) {


            UserFunctions userFunction = new UserFunctions();
            JSONObject json = userFunction.orderDetails(username, sPID, sProduct, sQuantity, sTotalPrice, Double.toString(pFinalPrice));

            Log.d("Button", "Order");
            return json;


        }

UserFunction类中的函数

/**
 * Function store order details
 **/
public JSONObject orderDetails(String username, String[] pid, String[] products, String[] quantity, String[] totalprice, String finalprice) {
    // Building Parameters
    List params = new ArrayList();
    params.add(new BasicNameValuePair("tag", order_tag));
    params.add(new BasicNameValuePair("username", username));
    params.add(new BasicNameValuePair("finalpice", finalprice));
    for (int i = 0; i < pid.length; i++) {
        params.add(new BasicNameValuePair("pid[i]", pid[i]));
    }   
    for (int j = 0; j < products.length; j++) {
        params.add(new BasicNameValuePair("products[j]", products[j]));
    }
    for (int k = 0; k < quantity.length; k++) {
        params.add(new BasicNameValuePair("quantity[k]", quantity[k]));
    }
    for (int l = 0; l < totalprice.length; l++) {
        params.add(new BasicNameValuePair("totalprice[l]", totalprice[l]));
    }

    JSONObject json = jsonParser.getJSONFromUrl(orderURL,params);
    return json;
}

Java解析器类:

public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List params) {
    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
        Log.e("JSON", json);
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }
    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
    // return JSON String
    return jObj;
}
}

这是我的index.php API

else if ($tag == 'order') {
    $username = $_POST['username'];
    $finalprice = $_POST['finalprice'];
    $pid = $_POST['pid'];

    $quantity = $_POST['quantity'];
    $totalprice = $_POST['totalprice'];

            $response["successfullypost"] = 1;
    $response["user"]["username"] = $username;
    $response["user"]["finalprice"] = $finalprice;
    $response["user"]["pid"] = $pid;
    $response["user"]["quantity"] = $quantity;
    $response["user"]["totalprice"] = $totalprice;
    echo json_encode($response);

    $uResult = mysql_query("SELECT * FROM users WHERE username = $username");
    $uid = $uResult['uid'];

    $counter = sizeof($pid);

    for ( $i=0; $i < $counter; $i++) {
        $db-> orderdetails($uid, $pid[$i], $quantity[$i], $totalprice[$i], $finalprice);
    }

}

else {
    $response["error"] = 3;
    $response["error_msg"] = "JSON ERROR";
    echo json_encode($response);
}

index.php调用此orderdetails函数

public function orderdetails ($uid, $pid, $quantity, $totalprice, $finalprice) {

    $pResult = mysql_query("SELECT * FROM products WHERE pid = $pid");
    $Product_ID = $pResult['ProductID'];

    $final = mysql_query("INSERT INTO vieworders (uid, ProductID, quantity, $totalprice, finalprice) 
        VALUES ('$uid', '$ProductID', '$quantity', '$totalprice', '$finalprice')");

}

新的JSON响应。尽管我必须要生产的产品不能显示阵列。为什么JSON标签显示“ i”而不是pid [i]?数量和总价相同

04-20 10:19:31.615: E/ViewRootImpl(20740): sendUserActionEvent() mView == null
04-20 10:19:44.505: E/JSON(20740): {"tag":"order","success":0,"error":0,"successfullypost":1,"user":{"username":"zulanawi","finalprice":null,"pid":{"i":"0002"},"quantity":{"k":"3"},"totlaprice":{"l":"32.400000000000006"}}}{"success":0}

问题答案:

完成!!!在将POST将String数组传递给PHP之后,我得到了答案。

/**
* Function store order details
**/
public JSONObject orderDetails(String username, String[] pid, String[] products,    String[] quantity, String[] totalprice, String finalprice) {
// Building Parameters
List params = new ArrayList();
params.add(new BasicNameValuePair("tag", order_tag));
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("finalpice", finalprice));
for (int i = 0; i < pid.length; i++) {
    params.add(new BasicNameValuePair("pid[]", pid[i]));
}   
for (int j = 0; j < products.length; j++) {
    params.add(new BasicNameValuePair("products[]", products[j]));
}
for (int k = 0; k < quantity.length; k++) {
    params.add(new BasicNameValuePair("quantity[]", quantity[k]));
}
for (int l = 0; l < totalprice.length; l++) {
    params.add(new BasicNameValuePair("totalprice[]", totalprice[l]));
}

JSONObject json = jsonParser.getJSONFromUrl(orderURL,params);
return json;
}


 类似资料:
  • 问题内容: 我正在开发一个测试Android应用程序,该应用程序必须显示mysql数据库中的一些数据。这是我的日志: 这里是JSONParser.java类 在这里,我用来显示所选数据的类: 这里的PHP文件: 另外,这里主要活动: 我在互联网上阅读了有关此错误的各种线索,但它甚至是由差异问题引起的,我没有找到与我的情况类似的情况或解决了我问题的解决方案。 问题答案: 看起来您的PHP文件正在返回

  • 我在尝试使用PUT方法时遇到了一个问题,我正在使用PUT方法通过web服务更新我的表记录,问题是在尝试更新数据时,我遇到了以下错误: informacioncom.android.volley.解析错误:org.json.JSONException:输入结束在字符0的 如果我检查数据库中的表,它不会输入null值,而是记录空格。 这是我用来更新数据的方法:

  • 我正在编写一个Android应用程序,可以解析从PHP网页返回的JSON,并且在Logcat中不断得到“org.JSON.jsonException:在字符0处结束输入”。代码如下: 感谢任何帮助:)

  • 我正在尝试登录应用程序,但我一直遇到“解析数据org.json.JSONException错误:在字符0的输入结束” 我的登录名。java看起来像这样 公共类登录扩展活动实现OnClickListener{私有EditText用户,pass; 私有静态最终字符串LOGIN_URL="my url"; //从真实服务器进行测试: } } 我的JSONParser。java如下所示:` 公共类JSON

  • 问题内容: 这是列表活动。 清单活动: 基本适配器类: 的PHP: 我的问题是,我尝试解析字符串,它的值就像我解析这种类型的值时一样,它没有显示结果,并给出了logcat。 日志猫: 当我解析简单的值并且更改数据库时,它给我很好的结果。但是,我需要解析该值。请帮帮我。谢谢 问题答案: 如您所说,您无法解析类似于“’B-‘,’O-‘”的json字符串,但是您可以成功解析诸如“ B,O”的字符串。 这

  • 问题内容: 我正在尝试从服务器获取JSON值。我不知道我的代码有什么问题。我正在使用,这是我的代码在 码: 这是logcat 这是 JSON 格式 问题答案: 您可能会得到一个空白的答复。它不为null,但 jsontext 为空。因此,您将收到此错误,而不是Nullpointer异常 您是否正在向服务器发送正确的参数。还要检查url是否响应POST请求。