I have done the following tutorial:
http://www.anddev.org/networking-database-problems-f29/connecting-to-mysql-database-t50063.html
for connecting an android device to an sqlserver(2005) using php. I have checked my php script and it runs and executes fine. When I run my program I get the following error:
01-26 14:17:43.491: E/log_tag(331): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray
01-27 09:24:13.610: E/log_tag(404): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray
01-27 09:26:45.190: E/log_tag(437): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray
01-27 09:31:14.221: E/log_tag(471): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray
01-27 09:43:44.501: E/log_tag(504): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray
I want my program to connect to the database and return the names of everyone whose EngineerId is greater than zero. Here is my code:
package com.david.DbConnect;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.TextView;
public class DbConnectActivity extends Activity {
/** Called when the activity is first created. */
TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create a crude view - this should really be set via the layout resources
// but since its an example saves declaring them in the XML.
LinearLayout rootLayout = new LinearLayout(getApplicationContext());
txt = new TextView(getApplicationContext());
rootLayout.addView(txt);
setContentView(rootLayout);
// Set the text and call the connect function.
txt.setText("Connecting...");
//call the method to run the data retreival
txt.setText(getServerData(KEY_121));
}
public static final String KEY_121 = "http://xxx.xxx.xx.xx/dbconnect.php"; //i use my real ip here
private String getServerData(String returnString) {
InputStream is = null;
String result = "";
//the year data to send
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("EngID","0"));
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(KEY_121);
// httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Error in http connection "+e.toString());
}
//convert response 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("log_tag", "Error converting result "+e.toString());
}
//parse json data
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","ContactName: "+json_data.getInt("ContactName")
);
//Get an output to the screen
returnString += "\n\t" + jArray.getJSONObject(i);
}
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return returnString;
}
}
Here is my php script:
<?php
$serverName = "xxxxxx"; //serverName\instanceName
$connectionInfo = array( "Database"=>"xxxxxx", "UID"=>"xxxxxxxx", "PWD"=>"xxxxxxx");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
//-----------------------------------------------
// Perform operations with connection.
//-----------------------------------------------
$sql = "SELECT ContactName FROM dbo.TBL_FACILITY_JOB_CALLS WHERE EngineerID>'".$_REQUEST['EngID']."'" ;
$stmt = sqlsrv_query($conn, $sql );
if ($stmt === false) {
die(print_r(sqlsrv_errors(), true));
}
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row['ContactName']. "<br />";
}
sqlsrv_free_stmt($stmt);
while($e=sqlsrv_fetch_assoc( $row))
$output[]=$e;
print(json_encode($output));
sqlsrv_close();
?>
Can anyone shed some light on this? It has been wrecking my head for days. Thanks
You have wrong data output by PHP. You cannot output any data except Json, so you should remove:
and any other echo’ed data except:
Additionally you should add headers for json, before send any data output: