Android,试图解析android的json数据

我试图从远程数据库读取我的数据库,因为我使用PHP代码连接到我的Mysql数据库并查询我的数据库:

文件名:check.php:

 

并且Java(Android)代码连接到远程DB:

 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.Toast; import java.net.URI; public class ConnectToMyDb extends Activity { InputStream is; private HttpPost httppost; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String result = ""; //http post try{ HttpClient httpclient = new DefaultHttpClient(); httppost = new HttpPost("http://www.Myurl.com/check.php"); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Log.e("log_tag", "connection success "); Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); }catch(Exception e){ Log.e("log_tag", "Error in http connection "+e.toString()); Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); } //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"); Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag", "Error converting result "+e.toString()); Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); } //parse json data try{ //ArrayList result1 = new ArrayList(); JSONArray jArray = new JSONArray(result); JSONObject json_data= new JSONObject(result); for(int i=0;i<jArray.length();i++){ json_data = jArray.getJSONObject(i); Log.i("log_tag"," name: "+json_data.getString("name"); Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); } }catch(JSONException e){ Log.e("log_tag", "Error parsing data "+e.toString()); Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); } } 

我的问题不是连接而是解析json我得到一个例外:

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

我会摆脱这条线:

 JSONArray jArray = new JSONArray(result); 

而是这样做:

 JSONObject json_data = new JSONObject(result); JSONArray nameArray = json_data.names(); JSONArray valArray = json.toJSONArray(nameArray); 

我相信这是正确的,但是,请学习本教程,它将适合您:

Android作为一个宁静的客户端

看起来您尝试转换为JSON的字符串(即result )实际上是一个完整的HTTP响应。 为了让你的代码通过,你只需要原始的JSON,不包括HTML。