我有一个应用程序,应该在单击按钮后在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"}
答案 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);
从那时起,你可以迭代这个对象数组并随意使用它。
一些音符:
Log.i("Log tag", "My first log
message");
Log
是一个android为你提供的类(你还是
当然需要导入它)。 i
是您可以的日志级别
选择e(错误),w(警告),i(信息),d(调试),v(详细)。
Log tag
只是一个字符串,基本上你可以放置任何你喜欢的东西
那里 - 我会建议班级名称。最后这条线是
执行后,您将在LogCat My first log message
中看到。记录
对于检测鳕鱼中的问题非常有用,因为你可以
在程序的某些位置显示变量值。