Android学习之JSON数据解析

小迈 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;

}

}

相关推荐

大树 / 0评论 2011-09-29