0

アプリケーションを実行すると、logcat で次のエラーが発生します。以前は多くのエラーがありましたが、いくつかの調査を行った後、解決することができました。ただし、これは私が理解できません:

03-04 02:52:29.475: E/JustDealsUtils(1913): Error parsing to json on getJarrayFromString(); org.json.JSONException: Expected ':' after result at character 8 of {result}

編集1:

エラーは次のとおりです。

Error parsing to json on getJarrayFromString(); org.json.JSONException: Value result of type java.lang.String cannot be converted to JSONArray

また、これにリンクされているのは、fillproductlist() のエラーです。

これが私のJavaコードです:

public void onTaskCompleted(String result) {
                        try {  
                            if(result!=""){
                                // the remote php link 
                                // converting the response into json array
                                Log.i(DEBUG, result);
                                jarray = utils.getJarrayFromString(result);

                                // number of rows in total for a query
                                int mysqlSize = (jarray.getJSONObject(0).getInt("numRows"));

                                Log.i(DEBUG, "From " + from + " to " + mysqlSize);

                                // to check if all the rows are parsed from the mysql
                                if(from <= mysqlSize){
                                    int rows;
                                    // to check if there is 0
                                    if(jarray.length()>0){
                                        Log.i(DEBUG, "From " + from + " to " + Math.floor(mysqlSize/nr)*nr);
                                        if(from+5<=Math.floor(mysqlSize/nr)*nr){
                                            rows = jarray.length();
                                        }else{
                                            rows = mysqlSize%nr+1;
                                            Utils.IS_ENDED_PRODUCT_LIST = true;
                                        }
                                        ArrayList<String> list = new ArrayList<String>();
                                        for(int i=1; i<rows; i++){
                                            JSONObject row = jarray.getJSONObject(i);
                                            bid.add(row.getInt("bid"));
                                            bTitle.add(row.getString("bTitle"));
                                            bCode.add(row.getString("bCode"));
                                            bPrice.add(row.getString("bPrice") + "£");
                                            bDescription.add(row.getString("bDescription"));
                                            bModule.add(row.getString("bModule"));
                                            bImage.add(Utils.PATH + row.getString("bImage"));
                                            list.add(row.getString("bImage"));
                                            // to check if an id already exists in the db or to create one if doesn't exist
                                            if(!db.hasIDBooks(row.getInt("bid"))) db.createRowOnBooks(row.getInt("bid"), row.getString("bTitle"), row.getString("bCode"), row.getString("bPrice"), row.getString("bDescription"), row.getString("bModule"), Utils.PATH + row.getString("bImage"), row.getString("bSpecialOffer"), row.getInt("bSpecialDiscount"), row.getString("bDateAdded"));
                                            Log.i(DEBUG, row.getString("bDescription"));
                                        }
                                        new DownloadImages(list, bAdapter).execute();
                                    }
                                }
                                postParameters.removeAll(postParameters);
                            }else{
                                Utils.IS_ENDED_PRODUCT_LIST = true;
                                if(rlLoading.isShown()){
                                    rlLoading.startAnimation(fadeOut());
                                    rlLoading.setVisibility(View.INVISIBLE);
                                }
                            }
                        } catch (Exception e) {  
                            Log.e(DEBUG, "Error at fillProductList(): " + e.toString());  
                        }
                    }
                });
                task.execute();

        }else{
            // if internet connectio is not available
            // then, rows will be fetched from the local sqllite database stored on the android phone
            if(db.size(justdealsDatabase.TABLE_BOOKS) > 0){
                Cursor cursor = db.getBooksRows(justdealsDatabase.TABLE_BOOKS);
                cursor.moveToFirst();
                while(!cursor.isAfterLast()){
                    bid.add(cursor.getInt(cursor.getColumnIndex(justdealsDatabase.KEY_BID)));
                    bTitle.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BTITLE)));
                    bCode.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BCODE)));
                    bPrice.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BPRICE))+ "£");
                    bDescription.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BDESCRIPTION)));
                    bModule.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BMODULE)));
                    bImage.add(cursor.getString(cursor.getColumnIndex(justdealsDatabase.KEY_BIMAGE)));
                    cursor.moveToNext();
                }
                bAdapter.notifyDataSetChanged();
                Utils.IS_ENDED_PRODUCT_LIST = true;
            }
        }
    }

私の JSON 配列コード (完全な編集 2):

public String getJsonFromUrl(String url){

        // to initialise the objects
        InputStream is = null;
        String result = "";

        //making HTTP POST request
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }catch(Exception e){
            Log.e(DEBUG, "Error getJsonFromUrl: " + e.toString());
        }

        // Converting to String
        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();
            result=sb.toString();
        }catch(Exception e){
            Log.e(DEBUG, "Error converting the response to string getJsonFromUrl: " + e.toString());
        }

        return result;
    }

    /**
     * To convert the string recieved into json object
     * result refers to the string that will be converted
     * @return will return the json array
     */
    public JSONArray getJarrayFromString(String result){
        // Parsing string to JSON Array
        try{
            jarray = new JSONArray("result");
        }catch(JSONException e){
            Log.e(DEBUG, "Error parsing to json on getJarrayFromString(); " + e.toString());
        }

        return jarray;
    }

そして私のPHP API(EDIT 1):

    <?php
    include("MysqlConnection.php");
    header('Content-Type: application/json');
    $from = $_POST["from"];
    $nr = $_POST["nr"];
    // those variables are for search
    $title = $_POST["title"];
    $code = $_POST["code"];
    $price = $_POST["price"];
    $module = $_POST["module"];
    $order = $_POST["order"];
    $by = $_POST["by"];


    $sql = "SET CHARACTER SET utf8";
    $db->query($sql);


        // if those 2 var are set then we order the query after them
        if(isset($order) && isset($by)){
            $sql .= " ORDER BY `$order` $by LIMIT $from, $nr";
        }else{
            $sql .= "LIMIT $from, $nr";
        }

        $query = $db->query($sql);
        $rows = array();
        $rows[] = array("numRows"=>$db->numRows($query));

        if($db->numRows($query)!=0){
            while($row = mysql_fetch_assoc($query)) {
                $rows[] =  $row;
            }
            echo(json_encode($rows));
        }
    }

    $db->closeConnection();
?>

皆さんが推奨するすべての提案を実装しましたが、このコードを機能させるにはまだ運がありません!!!!

「結果」文字列の値を JSONARRAY に変換できない理由がわかりません????

JSON ARRAY Declaration、RESULT STRING DECLARATION、および PHP を示しました (編集されたバージョンについては上記を参照してください)。

4

3 に答える 3

1

使用しechoないでくださいprint_r

echo json_encode($rows);

print_r配列形式で出力します。

于 2013-03-04T11:41:47.420 に答える
0

「{}」記号なしで配列に名前を付ける必要があるかもしれません。

jarray = new JSONArray("result");

それ以外の

jarray = new JSONArray("{result}");
于 2013-03-06T05:11:42.173 に答える
0

結果を 2 回送信しました。エンコードされた結果を 1 回だけ送信する必要があります。次のコードを削除して試してください。

echo json_encode($rows);
于 2013-03-04T11:44:42.750 に答える