0

Android タブレットから SQL Server に情報を送信しています。PHP で作成された Web サービスでこれを行っており、タブレット内の情報を JSON 形式で送信しています。正常に動作しますが、問題があります。JSON の要素の 1 つは配列そのものです。また、その配列には複数のエントリがある場合もあれば、1 つのエントリしかない場合もあります。私の言っていることが理解できるかどうかわかりませんが、例を次に示します。

<plant>
  <inspection>
    <problem>
      <id></id>
      <category></category>
      <description></description>
    </problem>
    <problem>
      <id></id>
      <category></category>
      <description></description>
    </problem>
  </inspection>
</plant>

上記の例では、コードは正常に機能します。ご覧のとおり、この例では検査に 2 つの問題があります。問題が 2 つ以上ある場合は問題なく動作します。ただし、問題が 1 つだけの場合、JSON はそれを配列として書き込めず、Web サービスで読み取るのに問題があります。データを JSON に変換するために使用する Java コードを次に示します。

                JSONObject holder = new JSONObject();
                JSONObject plant;
                JSONObject problem;

                DatabaseHandler handler = new DatabaseHandler(getApplicationContext());
                ArrayList<Plant> plants = handler.GetAllPlants();
                Inspection inspection;
                ArrayList<Problem> problems;

                if (plants != null) {
                    for (int i = 0; i < plants.size(); i++) {
                        plant = new JSONObject();
//                      handler.SetSynced(plants.get(i));
                        plant.put("plantID", plants.get(i).getPlantID());
                        plant.put("dome", plants.get(i).getDome());
                        plant.put("potholder", plants.get(i).getPotHolder());
                        plant.put("pot", plants.get(i).getPot());

                        inspection = handler.GetInspectionSync(plants.get(i));
                        if (inspection != null) {
                            plant.put("inspectionID", inspection.getInspectionID());
                            plant.put("inspectionDate", inspection.getInspectionDate());
                        }

                        problems = handler.GetAllProblems(inspection);
                        for (int k = 0; k < problems.size(); k++) {
                            problem = new JSONObject();
                            problem.put("problemID", problems.get(k).getProblemID());
                            problem.put("categoryID", problems.get(k).getCategoryID());
                            problem.put("problem", problems.get(k).getProblem());
                            problem.put("nokernel", problems.get(k).getNoKernel());
                            plant.accumulate("problems", problem);
                        }
                        holder.accumulate("plants", plant);
                    }

ずさんです私は知っています。プログラムはまったく異なる方法で動作するはずでしたが、土壇場でユーザーがすべてを変更したため、時間どおりに作成するために必要なものを即興で作成する必要がありました. これはPHPコードです:

if($conn) {
    foreach ($input['plants'] as $plant) {
        $query = 'INSERT INTO plants VALUES(' . $plant['plantID'] . ', ' . $plant['dome'] . ', ' .
                    $plant['potholder'] . ', ' . $plant['pot'] . ');';
        $params = array(1, "some data");
        $result = sqlsrv_query($conn, $query, $params);
        $query = 'INSERT INTO inspections VALUES(' . $plant['inspectionID'] . ', ' . $plant['plantID'] . ', \'' .
                    $plant['inspectionDate'] . '\');';
        $params = array(1, "some data");
        sqlsrv_query($conn, $query, $params);
        foreach($plant['problems'] as $problem) {
            $queryP = 'INSERT INTO problems VALUES(' . $problem['problemID'] . ', ' . $problem['categoryID'] . ', ' .
                        $plant['inspectionID'] . ', \'' . $problem['problem'] . '\', \'' . $problem['nokernel'] . '\');';
            fwrite($f, $queryP);
            $params = array(1, "some data");
            sqlsrv_query($conn, $queryP, $params);
        }
    }

どんな助けでも大歓迎です。これは、このプロジェクトを最終的に完了するために修正する必要がある唯一のことです。

4

1 に答える 1