【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 1480|回复: 0

Android中使用HttpGet方式获取服务器端PHP Json返回数据

[复制链接]
发表于 2013-1-15 22:56:47 | 显示全部楼层 |阅读模式
项目中为了节省用户通过3G网络访问系统内容的流量,决定采用Json的方式将服务器数据传递过来。而不是直接使用HTML的方式传输。
测试环境为:
XAMPP中的PHP + MYSQL+ Windows 7+Eclipse+本地网络


在IE中访问地址显示的JSon数据为:
  1. {"title":"TTT","id":1,"value":"TTT"}
复制代码
  1. <?php
  2. header("Content-Type: text/html; charset=UTF-8");
  3. $type = $_GET['type'];
  4. if($type == 1)
  5. {
  6. //$obj->title = "Test";
  7. //$obj->id = 1;
  8. //$obj->value = urlencode("TTT");
  9. //echo urldecode ( json_encode ($obj));
  10. $array = array( 'title'=>'TTT', 'id'=>1, 'value'=>urlencode("哈哈"));
  11. echo urldecode(json_encode($array));
  12. }
  13. ?>
复制代码
  1. package com.jouhu;

  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;

  4. import org.apache.http.HttpResponse;
  5. import org.apache.http.client.HttpClient;
  6. import org.apache.http.client.methods.HttpGet;
  7. import org.apache.http.impl.client.DefaultHttpClient;
  8. import org.apache.http.util.EntityUtils;
  9. import org.json.JSONException;
  10. import org.json.JSONObject;

  11. import android.app.Activity;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.view.View;
  15. import android.widget.Button;
  16. import android.widget.EditText;

  17. public class PHPJsonActivity extends Activity {
  18. /** Called when the activity is first created. */

  19. private String Tag = "PHPJsonActivity";
  20. @Override
  21. public void onCreate(Bundle savedInstanceState)
  22. {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.main);
  25. //EditText edit = (EditText)findViewById(R.id.editText1);
  26. //String url = "http://88.88.88.200:8888/phpjson/index.php?type=1";
  27. //getServerJsonDataWithNoType(url,edit);
  28. Button btn = (Button)findViewById(R.id.button1);
  29. btn.setOnClickListener(new View.OnClickListener() {

  30. @Override
  31. public void onClick(View v) {
  32. // TODO Auto-generated method stub
  33. EditText edit = (EditText)findViewById(R.id.editText1);
  34. String url = "http://88.88.88.200:8888/phpjson/index.php?type=1";
  35. getServerJsonDataWithNoType(url,edit);
  36. }
  37. });
  38. }
  39. public void getServerJsonDataWithNoType(String url,EditText editText)
  40. {
  41. int res = 0;
  42. HttpClient client = new DefaultHttpClient();
  43. StringBuilder str = new StringBuilder();
  44. HttpGet httpGet = new HttpGet(url);
  45. try
  46. {
  47. HttpResponse httpRes = client.execute(httpGet);
  48. httpRes = client.execute(httpGet);
  49. res = httpRes.getStatusLine().getStatusCode();
  50. if(res == 200)
  51. {
  52. BufferedReader buffer = new BufferedReader(new InputStreamReader(httpRes.getEntity().getContent()));
  53. for(String s = buffer.readLine(); s != null ; s = buffer.readLine())
  54. {
  55. str.append(s);
  56. }
  57. //String out = EntityUtils.toString(httpRes.getEntity().getContent(), "UTF-8");
  58. //StringBuilder sb = new StringBuilder()
  59. Log.i(Tag,str.toString());
  60. try
  61. {
  62. //JSONObject json = new JSONObject(str.toString()).getJSONObject("content");
  63. JSONObject json = new JSONObject(str.toString());
  64. String title = json.getString("title");
  65. Log.i(Tag,title);
  66. int id = json.getInt("id");
  67. String value = json.getString("value");
  68. Log.i(Tag,value);
  69. editText.setText("Title:" + title + " ID:" + id + " Value:" + value);
  70. }
  71. catch(JSONException e)
  72. {
  73. Log.i(Tag, e.getLocalizedMessage());
  74. //buffer.close();
  75. e.printStackTrace();
  76. }
  77. }
  78. else
  79. {
  80. Log.i(Tag, "HttpGet Error");
  81. }
  82. }
  83. catch(Exception e)
  84. {
  85. Log.i(Tag, "Exception");
  86. }
  87. }

  88. }
复制代码
1 出现Value of type java.lang.String cannot be converted to JSONObject.这是由于我们的php或者其他服务器脚本有BOM头造成的。可以通过Editplus或者EmEditor或者UltraEditor进行删除。具体可以参考如何用去掉UTF-8的BOM头
编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以UTF8编码。
运行Editplus,点击工具,选择首选项,选中文件,UTF-8标识选择 总是删除签名,
然后对PHP文件编辑和保存后的PHP文件就是不带BOM的了。
ultraedit去除bom头办法
打开文件后,另存为选项的编码格式里选择(utf-8 无bom头),确定就ok了
2 记得在AndroidManifest.XML中加入

< uses-permission android:name="android.permission.INTERNET" />

3 下面应该处理的问题是 中文以及根据数据库中的数据使用ListView或GroupView之类的生成UI。
主参考文章:
http://www.cnblogs.com/tt_mc/archive/2011/01/04/1925327.html
http://www.itxue.com/html/caozuoxitong/WINNT/20101123/7077.html
参考文章:
1 http://www.instropy.com/2010/06/ ... e-with-android-sdk/
2 http://www.josecgomez.com/2010/0 ... ervices-using-json/
3 http://www.cnblogs.com/tt_mc/archive/2011/01/04/1925327.html
4 http://blog.csdn.net/dadoneo/article/details/6233366
5 http://news.cnblogs.com/n/88356/
6 http://blog.lrenwang.com/post/114/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-9-29 07:27

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表