终于找到android与php的json交互能走通的方法
php代码:
<?php
$arr = array(
'username' => 'shenwave',
'password' => '123456'
);
echo json_encode($arr);
?>
java代码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
HttpClient client = new DefaultHttpClient();
StringBuilder builder = new StringBuilder();
HttpGet myget = new HttpGet("http://shenwave.com/applogin.php?a=1");
try {
HttpResponse response = client.execute(myget);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(),HTTP.UTF_8));
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
String jsonString=builder.toString().trim();
jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);
JSONObject jsonObject = new JSONObject(jsonString);
String re_username = jsonObject.getString("password");
TextView t = (TextView) this.findViewById(R.id.t);
t.setText(re_username);
} catch (Exception e) {
e.printStackTrace();
}
}
--------------------------------------------------------------转http://blog.sina.com.cn/s/blog_6d00214601012oop.html
Android开发中如何解析JSON数据格式?
1.JSON解析
(1).解析Object之一:
解析方法:
1 | JSONObject demoJson = new JSONObject(jsonString); |
2 | String url = demoJson.getString( "url" ); |
(2).解析Object之二:
1 | { "name" : "android" , "name" : "iphone" } |
解析方法:
1 | JSONObject demoJson = new JSONObject(jsonString); |
2 | String name = demoJson.getString( "name" ); |
3 | String version = demoJson.getString( "version" ); |
4 | System.out.println( "name:" +name+ ",version:" +version); |
(3).解析Array之一:
解析方法:
1 | JSONObject demoJson = new JSONObject(jsonString); |
2 | JSONArray numberList = demoJson.getJSONArray( "number" ); |
3 | for (int i=0; i<numberList.length(); i++){ |
4 | //因为数组中的类型为int,所以为getInt,其他getString,getLong同用 |
5 | System.out.println(numberList.getInt(i)); |
(4).解析Array之二:
1 | { "number" :[[1],[2],[3]]} |
解析方法:
2 | JSONObject demoJson = new JSONObject(jsonString); |
3 | JSONArray numberList = demoJson.getJSONArray( "number" ); |
4 | for ( int i= 0 ; i<numberList.length(); i++){ |
6 | System.out.println(numberList.getJSONArray(i).getInt( 0 )); |
(5).解析Object和Array:
1 | { "mobile" :[{ "name" : "android" },{ "name" : "iphone" }]} |
解析方法:
1 | JSONObject demoJson = new JSONObject(jsonString); |
2 | JSONArray numberList = demoJson.getJSONArray( "mobile" ); |
3 | for ( int i= 0 ; i<numberList.length(); i++){ |
4 | System.out.println(numberList.getJSONObject(i).getString( "name" )); |
所以,我们发现get后面接着的是你想要的得到的结果的类型:getType,这个对理解很有帮助。
(6).使用optType:
上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。
如果使用optType,找不到节点,则返回null或者默认值。
2 | String url = demoJson.getString( "url" ); |
3 | //无url节点,返回空,如果为基本类型,则返回默认值 |
4 | String url = demoJson.optString( "url" ); |
(7).UTF-8的BOM头导致解析JSON异常的问题
到json文件保存为utf-8的时候,在windows平台下,会产生bom头"EF BB EF"字节在文本的最前面(需要用十六进制工具打开才能看的到)。
有两种解决方法:
a.使用UltraEdit打开json文件,另存为的时候,选择格式UTF-8,无BOM头,如果还不行,在用记事本打开,另存为UTF-8下,多试几次就可以了。
b.使用代码处理,截取json主体内容:
1 | String jsonString = getJsonString(); |
2 | jsonString = jsonString.substring(jsonString.indexOf( "{" ),jsonString.lastIndexOf( "}" )+ 1 );
|