0

我有我的安卓应用程序。假设让用户进入一个区域,然后它会拉动我的 myqsl 表中的所有组织并将其显示在手机上,但是当我运行应用程序时,我收到了这个错误:

Error parsing data org.json.JSONException: 
  Value <?xml of type java.lang.String cannot be converted to JSONArray

这是我的代码:

JSON解析器

        package com.example.islamicorg;

import java.util.ArrayList;

import org.apache.http.NameValuePair;
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.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class JSONUseActivity extends Activity {


EditText byear;   // To take birthyear as input from user
Button submit;    
TextView tv;      // TextView to show the result of MySQL query 

String returnString;   // to store the result of MySQL query after decoding JSON

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
/* StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork() // StrictMode is most commonly used to catch accidental disk or network access on the application's main thread
.penaltyLog().build());*/
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

byear = (EditText) findViewById(R.id.editText1);
submit = (Button) findViewById(R.id.submitbutton);
tv = (TextView) findViewById(R.id.showresult);

// define the action when user clicks on submit button
submit.setOnClickListener(new View.OnClickListener(){        
public void onClick(View v) {
// declare parameters that are passed to PHP script i.e. the name "birthyear" and its value submitted by user   
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();

// define the parameter
postParameters.add(new BasicNameValuePair("state",byear.getText().toString()));
String response = null;

// call executeHttpPost method passing necessary parameters 
try {
response = CustomHttpClient.executeHttpPost(
//"http://129.107.187.135/CSE5324/jsonscript.php", // your ip address if using localhost server
"http://10.0.2.2/android_login_api/include/islam.php",  // in case of a remote server
postParameters);


// store the result returned by PHP script that runs MySQL query
String result = response.toString();  


//parse json data
try{
returnString = "";
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){

JSONObject json_data = jArray.getJSONObject(i);
Log.i("log_tag","id: "+json_data.getInt("ID")+
", name: "+json_data.getString("Name")+
", phone: "+json_data.getInt("Telephone")+
", fax: "+json_data.getInt("Fax")+
", web: "+json_data.getString("WebAddress")+
", state: "+json_data.getString("state")+
", address: "+json_data.getString("Address")+
", mailing: "+json_data.getString("MailingAddress"));
//Get an output to the screen
returnString += "\n" + json_data.getString("Name") + "\n"+ json_data.getInt("Telephone")+ "\n"+ json_data.getInt("Fax")+ "\n"+ json_data.getString("WebAddress")+ "\n"+ json_data.getString("state")+ "\n"+ json_data.getString("Address")+ "\n"+ json_data.getString("MailingAddress");
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}

try{
tv.setText(returnString);
}
catch(Exception e){
Log.e("log_tag","Error in Display!" + e.toString());;          
}   
}
catch (Exception e) {
Log.e("log_tag","Error in http connection!!" + e.toString());     
}
}         
});
}
}

这是http客户端

package com.example.islamicorg;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;

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.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

import android.util.Log;

public class CustomHttpClient {

/** The time it takes for our client to timeout */

public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds


/** Single instance of our HttpClient */

private static HttpClient mHttpClient;


/**

* Get our single instance of our HttpClient object.

* 

* @return an HttpClient object with connection parameters set

*/

private static HttpClient getHttpClient() {

if (mHttpClient == null) {

mHttpClient = new DefaultHttpClient();

final HttpParams params = mHttpClient.getParams();

HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);

HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);

ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);

}

return mHttpClient;

}


/**

* Performs an HTTP Post request to the specified url with the specified

* parameters.

* 

* @param url

*            The web address to post the request to

* @param postParameters

*            The parameters to send via the request

* @return The result of the request

* @throws Exception

*/

public static String executeHttpPost(String url,

ArrayList<NameValuePair> postParameters) throws Exception {

BufferedReader in = null;

try {

HttpClient client = getHttpClient();

HttpPost request = new HttpPost(url);

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(

postParameters);

request.setEntity(formEntity);

HttpResponse response = client.execute(request);

in = new BufferedReader(new InputStreamReader(response.getEntity()

.getContent()));



StringBuffer sb = new StringBuffer("");

String line = "";

String NL = System.getProperty("line.separator");

while ((line = in.readLine()) != null) {

sb.append(line + NL);

}

in.close();


String result = sb.toString();

return result;

} finally {

if (in != null) {

try {

in.close();

} catch (IOException e) {

Log.e("log_tag", "Error converting result "+e.toString()); 

e.printStackTrace();

}

}

}

}


/**

* Performs an HTTP GET request to the specified url.

* 

* @param url

*            The web address to post the request to

* @return The result of the request

* @throws Exception

*/

public static String executeHttpGet(String url) throws Exception {

BufferedReader in = null;

try {

HttpClient client = getHttpClient();

HttpGet request = new HttpGet();

request.setURI(new URI(url));

HttpResponse response = client.execute(request);

in = new BufferedReader(new InputStreamReader(response.getEntity()

.getContent()));


StringBuffer sb = new StringBuffer("");

String line = "";

String NL = System.getProperty("line.separator");

while ((line = in.readLine()) != null) {

sb.append(line + NL);

}

in.close();


String result = sb.toString();

return result;

} finally {

if (in != null) {

try {

in.close();

} catch (IOException e) {

Log.e("log_tag", "Error converting result "+e.toString()); 

e.printStackTrace();

}

}

}

}

}

这是我的 php 脚本:

<?php
// PHP variable to store the host address
$db_host  = "localhost";
// PHP variable to store the username
$db_uid  = "admin";
// PHP variable to store the password
$db_pass = "123";
// PHP variable to store the Database name  
$db_name  = "android_app"; 
// PHP variable to store the result of the PHP function 'mysql_connect()' which establishes the PHP & MySQL connection  
$db_con = mysql_connect($db_host,$db_uid,$db_pass) or die('could not connect');
mysql_select_db($db_name);
$sql = "SELECT * FROM islamic_organisation WHERE  state > '". $_POST["state"]."'";
$result = mysql_query($sql);
while($row=mysql_fetch_assoc($result))
$output[]=$row;
$myFile = "testFile.txt"; $fh = fopen($myFile, 'w') or die("can't open file"); fwrite($fh, print_r($output,true)); fclose($fh);
print(json_encode($output));

mysql_close();   
?>

关于如何解决的任何想法,我将不胜感激

4

2 回答 2

0

查看创建返回的 json 结果的 php 代码会很有帮助...... json 格式是否正确?看起来您正在返回一个字符串而不是一个数组。

于 2013-04-23T15:44:43.603 回答
0

哪一行抛出异常?我认为是

JSONArray jArray = new JSONArray(result);

如果是这样,在我看来,服务器正在为您的应用程序提供 XML 数据。

于 2013-04-23T15:46:17.063 回答