java - Android ArrayIndexOutOfBoundsException 向 mysql 插入行

标签 java php android mysql sqlite

我在将行插入 mysql 表时遇到错误。

记录来 self 本地的 sqlite 数据库。我目前有两条记录,想将它们插入到 mysql 数据库中。

下面是我正在编写的代码:

    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++){

它可以工作,但最后一条记录仅保存到远程 mysql 数据库中。它应该保存我从本地 sqlite 数据库中获得的两条记录。

最佳答案

只需更改条件<=< .

Bcs,例如,如果您的 array包含三个元素,length array的将为 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] )); 

}

关于java - Android ArrayIndexOutOfBoundsException 向 mysql 插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561570/

相关文章:

java - 测试在单独运行时通过,但在整个测试类运行时不通过

php - 此路由不支持 GET 方法。支持的方法 : HEAD

php - 无法连接MySQL数据库?

android - 如何在Android中的Mp android Bar Chart中将两位小数设置为Bar Entry

java - XML 资源中的变量 - 将值从父级传递给子级

java - 使用 GSON 序列化/反序列化包含特殊枚举(不是字符串枚举)的 POJO

java - 简单的 android 和 ASP.NET 组合

java - WeakHashMap 是否在 full GC 期间被清除?

php - mysql结果只能看到好友id

android - 房间数据库效率低下