2011-12-15 166 views
0

嗨,我使用此代码将Android连接到MySQL槽PHP的Android Mysql的JSON输出格式不正确

php文件

<?php 

     mysql_connect("127.0.0.1","root","xxpasswordxx"); 

     mysql_select_db("peopledata"); 

     $q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'"); 

     while($e=mysql_fetch_assoc($q)) 

       $output[]=$e; 

      print(json_encode($output)); 

    mysql_close(); 
?> 

这是java的

package com.connector; 

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 whitehat 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://xx.xx.xxx.xxx/hellomysql/mysqlcon.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("year","1970")); 

    //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","id: "+json_data.getInt("id")+ 
          ", name: "+json_data.getString("name")+ 
          ", sex: "+json_data.getInt("sex")+ 
          ", birthyear: "+json_data.getInt("birthyear") 
        ); 
        //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; 
} 

} 

,输出类似

{“birthyear”:“1973”,“id”:“1”,“sex”:“1”,“name”:“vlizzard”}

但这不是一个正确的JSON格式!如果我评论的Java的一部分,这样

try{ 
     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")+ 
         ", sex: "+json_data.getInt("sex")+ 
         ", birthyear: "+json_data.getInt("birthyear") */ 

       ); 
       //Get an output to the screen 
       returnString += "\n\t" + jArray.getJSONObject(i); 

反正作品,这意味着从PHP文件中的结果去反正筛选...什么是错的? 有人可以帮我吗?

+0

刚才检查您的JSON是有用的,但它是一个有效的JSON响应。那么问题是什么? – 2011-12-15 14:38:47

+0

我不确定{“birthyear”:“1973”,“id”:“1”,“sex”:“1”,“name”:“vlizzard”}是无效的json格式。我错过了什么吗? (再加上你忘了注释掉一个“);”) – craniumonempty 2011-12-15 14:42:36

回答

0

是的,这是有效的JSON。为什么你认为它不是?这可能与您阅读JSON值的方式有关。它们似乎都是以字​​符串形式返回的。尝试getString()而不是getInt(),然后根据需要转换为int或其他数据类型。

0

更改为下面的代码

mysql_connect("127.0.0.1","root","xxpasswordxx"); 

代替

mysql_connect("localhost","root",""); 

我希望这是