PHP和Android:java.lang.String无法转换为JSONArray


PHP and Android: java.lang.String cannot be converted to JSONArray

我在Android手机中测试以下代码时出错:

org.json.JSONException: 
    Value <!-- of type java.lang.String cannot be converted to JSONArray

我的PHP代码如下:我使用了prepare语句

<?php
 define('__ROOT__', dirname(dirname(__FILE__))); 
 require_once(__ROOT__.'/public_html/Config.php');
 // Connecting to mysql database
 $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
 // json response array
 $response = array();
 if (isset($_POST['treecondition'])) {
  // receiving the post params
 $treecondition = $_POST['treecondition'];
 // get the tree details for google map marker
   if($stmt = $mysqli->prepare("SELECT treeid, treelatitude, treelongitude FROM tree WHERE treecondition = ?")){
  $stmt->bind_param("s", $treecondition);
  $stmt->execute();
  $stmt->store_result();
  $stmt->bind_result($treeid, $treelatitude, $treelongitude);
  if ($stmt->num_rows > 0) {
  while($tree = $stmt->fetch()) {
   $response['treeid'] = $treeid;
   $response['treelatitude'] = $treelatitude;
   $response['treelongitude'] = $treelongitude;
   echo json_encode($response);
    }  
    }
   } else {
     // user is not found with the credentials
     $response["error"] = TRUE;
     $response["error_msg"] = "Tree list view credentials are wrong.  Please try again!";
     echo json_encode($response);
      }
    $mysqli->close();
     }

我的Android截击代码如下:使用Jsonarray

 public void onResponse(String response) {
            Log.d(TAG, "Location Response: " + response.toString());
            hideDialog();

            try {

                JSONArray jTreeList = new JSONArray(response);
                // boolean error = jObj.getBoolean("error");
                ArrayList<LatLng> list = new ArrayList<LatLng>();
                // Check for error node in json
                for (int i = 0; i < jTreeList.length(); i++) {
                    JSONObject location = jTreeList.getJSONObject(i);

                    String treeid = location.getString("treeid");
                  //  String treespecies = location.getString("treespecies");
                    Double treelatitude = location.getDouble("treelatitude");
                    Double treelongitude = location.getDouble("treelongitude");
                    LatLng latlng = new LatLng(treelatitude, treelongitude);
                    list.add(new LatLng(treelatitude, treelongitude));
                    // Create a heat map tile provider, passing it the latlngs of the police stations.
                    HeatmapTileProvider provider = new HeatmapTileProvider.Builder().data(list).build();
                    // Add a tile overlay to the map, using the heat map tile provider.
                    mMap.addTileOverlay(new TileOverlayOptions().tileProvider(provider));
                    // Moving CameraPosition to last clicked position
                    mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));
                    // Setting the zoom level in the map on last position is clicked
                    mMap.animateCamera(CameraUpdateFactory.newLatLng(latlng));
                    mMap.animateCamera(CameraUpdateFactory.zoomTo(3));
                }
                // Launch
            } catch (JSONException e) {
                // JSON error
                e.printStackTrace();
                Toast.makeText(getActivity().getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Login Error: " + error.getMessage());
            Toast.makeText(getActivity().getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_LONG).show();
            hideDialog();
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            // Posting params to register url
            Map<String, String> params = new HashMap<String, String>();
            params.put("search", search);

            return params;
        }
    };
    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
}

请在程序输出后查看我的错误

11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow D/ClusterMapFragment﹕ Location Response:
<!-- Hosting24 Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<!-- End Of Analytics Code -->
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕   org.json.JSONException: Value <!-- of type java.lang.String cannot be converted to JSONArray
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at org.json.JSONArray.<init>(JSONArray.java:96)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at org.json.JSONArray.<init>(JSONArray.java:108)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.example.bharat.plantnow.Maps.ClusterMapFragment$2.onResponse(ClusterMapFragment.java:143)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.example.bharat.plantnow.Maps.ClusterMapFragment$2.onResponse(ClusterMapFragment.java:131)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:739)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5292)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
11-20 14:32:38.450  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
11-20 14:32:38.451  23138-23138/com.example.bharat.plantnow W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

您收到的Json响应没有格式化为Json,它包含无效字符'<!--',这就是您的jsonparser抛出Jsonexception的原因。

尝试将php文件保存在cp1252编码中

  1. 在Eclipse 中打开php文件

  2. 编辑>设置编码,然后设置为cp1252

  3. 保存