使用PHP将JSON转换为SQL DB中的字符串

时间:2012-02-06 07:12:06

标签: php android mysql json

我有一个应用程序,应该在单击按钮后在textview中显示一个字符串;相反,它显示代码的JSON格式,而不是未编码的JSON。这是我的android代码:

    package game.com;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
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.view.View;
import android.widget.Button;
import android.widget.TextView;

public class JSONtestActivity extends Activity {

String result = "";
InputStream is = null;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button btn = (Button) findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            TextView one = (TextView) findViewById(R.id.textView1);

            returnJson();

        //end of onClick    
        }
    //end of onClickListener
    });


//end of oncreate()    
}

public void returnJson(){

    TextView one = (TextView) findViewById(R.id.textView1);

    try{
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new       HttpPost("http://10.0.2.2/textures_story_list.php");

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

    }catch(Exception e) {
        one.setText("error3");
    }

    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) {
        one.setText("error2");          
        }

    try{
        JSONArray jArray = new JSONArray(result);
        for(int i = 0;i<jArray.length();i++){
            JSONObject json_data = jArray.getJSONObject(i);
            Log.i("log_tag","story_name: "+json_data.getString("story_name") 
                    );
            result += "\n" + jArray.getJSONObject(i); 



        }
        one.setText(result);
    }
    catch(JSONException e) {
        one.setText("error1");
    }
        return;


//end of returnJson()   
}



//end of class body    
}

和我的php

<?php 
mysql_connect("127.0.0.1","root");
mysql_select_db("textures_story_list");
$sql=mysql_query("SELECT story_name FROM story_list WHERE story_name LIKE 'sto%'");
while($row=mysql_fetch_assoc($sql)) $output[]=$row;
print(json_encode($output));
mysql_close();
?>

有人可以帮忙吗?它不显示名称而不是json格式。这是它在textview中显示的内容,而不是“故事一”,“故事二”等等:

[{"story_name":"Story One"}
 {"story_name":"Story Two"}, 
 {"story_name":"Story Three"}, 
 {"story_name":"Story Four"},
 {"story_name":"Story Five"},
 {"story_name":"Story Six"}]/n{"story_name":"Story One"},
 {"story_name":"Story Two"},
 {"story_name":"Story Three"},
 {"story_name":"Story Four"},
 {"story_name":"Story Five"},
 {"story_name":"Story Six"}

1 个答案:

答案 0 :(得分:1)

我可能太过传教士,但每次在java中解析字符串到对象时,我建议使用Gson library。它很轻巧,在Android上也可以完美运行。对于您的特定情况,您可以自己解析字符串,但是我认为这不是您需要解析json的唯一地方,因此库可能会帮助您。这是我的建议:

声明一个json将被反序列化的类:

import com.google.gson.annotations.SerializedName;
public class Story {
    @SerializedName(story_name)
    private String storyName;
}

然后将字符串反序列化为此类:

Gson gson = new Gson();
Story [] stories = gson.fromJson(is, Story[].class);

从那时起,你可以迭代这个对象数组并随意使用它。

一些音符

  • '\ n'写成\ n not / n。
  • 日志记录是了解您是否正在编码的绝对要求 Android系统。基本上你只需要写Log.i("Log tag", "My first log message"); Log是一个android为你提供的类(你还是 当然需要导入它)。 i是您可以的日志级别 选择e(错误),w(警告),i(信息),d(调试),v(详细)。 Log tag只是一个字符串,基本上你可以放置任何你喜欢的东西 那里 - 我会建议班级名称。最后这条线是 执行后,您将在LogCat My first log message中看到。记录 对于检测鳕鱼中的问题非常有用,因为你可以 在程序的某些位置显示变量值。