終於找到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 );
|