Android ArrayIndexOutOfBounds向mysql插入行时出现异常


Android ArrayIndexOutOfBoundsException in inserting rows to mysql

我在向mysql表中插入行时出错。

这些记录来自我的本地sqlitedb。我目前有两条记录,希望将它们插入到mysqldb中。

以下是我正在处理的代码:

    String[] arrDocumentNumber, arrTransactionDate, arrItemCode;
    arrDocumentNumber = dbHelper.getAllDocumentNumbersFromOUTTRANS();
    arrTransactionDate = dbHelper.getAllTransactionDatesFromOUTTRANS();
    arrItemCode = dbHelper.getAllItemCodesFromOUTTRANS();
    protected String doInBackground(String... args) {
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        for(int i = 0; i <= arrDocumentNumber.length; i++){
            params.add(new BasicNameValuePair(TAG_DOCUMENTNUMBER, arrDocumentNumber[i] ));
            params.add(new BasicNameValuePair(TAG_TRANSACTIONDATE, arrTransactionDate[i] ));
            params.add(new BasicNameValuePair(TAG_ITEMCODE, arrItemCode[i] )); 
        }
        // getting JSON Object
        // Note that insert outtrans url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_insertTo_outtrans,
                "POST", params);
 }

PHP:

 <?php
// array for JSON response
$response = array();
// check for required fields
if ( isset($_POST['documentnumber']) && isset($_POST['transactiondate']) && isset($_POST['itemcode']) ){
    $documentnumber = $_POST['documentnumber'];
    $transactiondate = $_POST['transactiondate'];
    $itemcode = $_POST['itemcode'];
    // include db connect class
    include('dbconnect.php');
    $result = $conn->prepare("INSERT INTO outtrans(documentnumber, transactiondate, itemcode) VALUES (:documentnumber, :transactiondate, :itemcode)");
    $result->bindParam(':documentnumber', $documentnumber);
    $result->bindParam(':transactiondate', $transactiondate);
    $result->bindParam(':itemcode', $itemcode);
    $result->execute();

    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "New record successfully created.";
        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";
        // echoing JSON response
        echo json_encode($response);
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";
    // echoing JSON response
    echo json_encode($response);
}
?>

我在这行遇到错误:

   params.add(new BasicNameValuePair(TAG_DOCUMENTNUMBER, arrDocumentNumber[i] ));

有什么想法吗?我真的陷入了这个问题。我们非常感谢您的帮助。谢谢

更新:我换了

   for(int i = 0; i < arrDocumentNumber.length; i++){

它是有效的,但最后一条记录只保存到远程mysqldb中。它应该保存我从本地sqlite数据库中获得的两条记录。

只需将条件<=更改为<

Bcs,例如,如果您的array包含三个元素,则arraylength将为3。因此,for loop应该只循环三次。但是,您已经将i初始化为0,并将条件设置为i <= arrDocumentNumber.length,因此for will总共循环四次,直到i的值从0变为3。所以,它抛出了ArrayindexOutofBoundexception

条件应为:

for(int i = 0; i < arrDocumentNumber.length; i++)

for(int i = 1; i <= arrDocumentNumber.length; i++)

示例代码:

for(int i = 0; i < arrDocumentNumber.length; i++){
params.add(new BasicNameValuePair(TAG_DOCUMENTNUMBER, arrDocumentNumber[i] ));
params.add(new BasicNameValuePair(TAG_TRANSACTIONDATE, arrTransactionDate[i] ));
params.add(new BasicNameValuePair(TAG_ITEMCODE, arrItemCode[i] )); 
}

数组索引应小于数组长度。的变化

 for(int i = 0; i <= arrDocumentNumber.length; i++){

收件人,

 for(int i = 0; i < arrDocumentNumber.length; i++){

您需要更改for条件:

for(int i = 0; i <= arrDocumentNumber.length; i++){

for(int i = 0; **i < arrDocumentNumber.length;** i++){

小于也不等于低于

这会引发异常