0

Androidアプリがあります。これは、ユーザーがエリアに入ると、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 に答える