小迈 2011-10-12
在Android应用开发中,常用的数据交换格式有XML和JSON,这两种方式各有各的好处,我们在特定的应用开发中可以选择合适的一种。下面来看一下JOSN数据解析:
例子永远是最好的教程,下面我们来看个例子!
有这样一个JSON数据:"{"username":"zhangsan","password":"123456"}"
通过解析后对应的数据显示在相应的控件中:
就是上面这种效果。
在Android中使用json需要一个jar包,gson-1.7.jar;可以在google的网站上下载。把这个包加到项目的构建路径中就行了。
下面是这个项目的源码(源码中的类及方法可以参考API文档):
AndroidManifest.xml:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.gufengxiachen"
android:versionCode="1"
android:versionname="1.0">
<uses-sdkandroid:minSdkVersion="8"/>
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".json"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
main.xml:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/username"
/>
<EditText
android:id="@+id/username"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></EditText>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/password"
/>
<EditText
android:id="@+id/password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></EditText>
<Button
android:id="@+id/parse"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/parse"
>
</Button>
</LinearLayout>
json.java:
packagecom.gufengxiachen;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.EditText;
publicclassjsonextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
privateStringname;
privateStringages;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetAges(){
returnages;
}
publicvoidsetAges(Stringages){
this.ages=ages;
}
privateEditTextusername=null;
privateEditTextpassword=null;
privateButtonparse=null;
privateStringjsonData="[{\"username\":\"zhagnsan\",\"password\":\"123456\"}]";
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
username=(EditText)findViewById(R.id.username);
password=(EditText)findViewById(R.id.password);
parse=(Button)findViewById(R.id.parse);
parse.setOnClickListener(newparseListener());
}
publicclassparseListenerimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
ParseJsonparseJson=newParseJson();
jsonjson=parseJson.parse(jsonData);
username.setText(json.getName());
password.setText(json.getAges());
}
}
}
ParseJson.java:
packagecom.gufengxiachen;
importjava.io.IOException;
importjava.io.StringReader;
importcom.google.gson.stream.JsonReader;
publicclassParseJson{
publicjsonparse(StringjsonData){
jsonjson=newjson();
JsonReaderjsonReader=newJsonReader(newStringReader(jsonData));
try{
jsonReader.beginArray();
while(jsonReader.hasNext()){
jsonReader.beginObject();
while(jsonReader.hasNext()){
StringtagName=jsonReader.nextName();
if(tagName.equals("username")){
json.setName(jsonReader.nextString());
System.out.println(json.getName());
}elseif(tagName.equals("password")){
json.setAges(""+jsonReader.nextInt());
System.out.println(json.getAges());
}
}
jsonReader.endObject();
}
jsonReader.endArray();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnjson;
}
}