package czg.czggsonfastjson;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import czg.czggsonfastjson.Bean.Book;
import czg.czggsonfastjson.Bean.Tag;
public class GsonFastJsonActivity extends AppCompatActivity {
String URL="https://api.douban.com/v2/book/1220562";
String TAG=this.getClass().getName();
private TextView tv_Title,tv_Publisher,tv_TagSize,tv_bookCount;
private Button btn_Gson,btn_FastJson,btn_GetJsonArrayCountByFastJson;
private EditText et_Json;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gson_fastjson);
initView();
}
private void initView() {
tv_Title= (TextView) findViewById(R.id.tv_Title);
tv_Publisher= (TextView) findViewById(R.id.tv_Publisher);
tv_TagSize = (TextView) findViewById(R.id.tv_TagSize);
tv_bookCount = (TextView) findViewById(R.id.tv_bookCount);
et_Json= (EditText) findViewById(R.id.et_Json);
btn_Gson= (Button) findViewById(R.id.btn_Gson);
btn_FastJson= (Button) findViewById(R.id.btn_FastJson);
btn_GetJsonArrayCountByFastJson= (Button) findViewById(R.id.btn_GetJsonArrayCountByFastJson);
btn_Gson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getDataVolleyForGson();
}
});
btn_FastJson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getDataVolleyForFastJson();
}
});
btn_GetJsonArrayCountByFastJson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s_Tmp;
s_Tmp=et_Json.getText().toString();
if (s_Tmp.equals("")){
Toast.makeText(getApplicationContext(),"请先用FastJson获取数据,同时生成模拟数据",Toast.LENGTH_LONG).show();
return;
}
List<Book> books=JSON.parseObject(s_Tmp,
new TypeReference<List<Book>>(){
});
tv_bookCount.setText("解析有"+books.size()+"本书");
}
});
};
public void getDataVolleyForFastJson() {
StringRequest request =new StringRequest(URL, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
//Log.i(TAG,s);
dealDataUseFastJson(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
//请求加入到队列
new Volley().newRequestQueue(getApplicationContext()).add(request);
}
/**
* 用FastJson解析json数据
* @param s
*/
private void dealDataUseFastJson(String s) {
Book book = JSON.parseObject(s,Book.class);
tv_Title.setText(book.getTitle());
tv_Publisher.setText(book.getPublisher());
tv_TagSize.setText(book.getTags().size()+"");
//模拟加入3 本书
List<Book> book_list = new ArrayList<Book>();
book_list.add(book);
book.setTitle("第二本书");
book_list.add(book);
book.setTitle("第3本书");
book_list.add(book);
String s_Tmp;
s_Tmp=JSON.toJSONString(book_list);
et_Json.setText(s_Tmp);
//可以把打印log的s_Tmp拷贝出来,放到在线json进行解析http://json.tongxiehui.net/
Log.i(TAG,s_Tmp);
}
public void getDataVolleyForGson() {
StringRequest request =new StringRequest(URL, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
//Log.i(TAG,s);
dealDataUseGson(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
//请求加入到队列
new Volley().newRequestQueue(getApplicationContext()).add(request);
}
/**
* 用Gson解析json数据
* @param s
*/
private void dealDataUseGson(String s) {
Gson gson = new Gson();
Book book = gson.fromJson(s,Book.class);
tv_Title.setText(book.getTitle());
tv_Publisher.setText(book.getPublisher());
tv_TagSize.setText(book.getTags().size()+"");
//下面用Gson解析jsonArray数据
Gson gson2 = new Gson();
Type type=new TypeToken<ArrayList<Tag>>(){
}.getType();
try {
JSONObject object =new JSONObject(s);
ArrayList<Tag> tags=gson.fromJson(object.getString("tags"),type);
if (!tags.isEmpty()){
Toast.makeText(getApplicationContext(),"tags包含的记录数是:"+tags.size(),Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
|