Android利用Volley异步加载(JSON和图片)完整示例
生活随笔
收集整理的這篇文章主要介紹了
Android利用Volley异步加载(JSON和图片)完整示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
android的json解析部分都在包org.json下,主要有以下幾個類:?
JSONObject:可以看作是一個json對象,這是系統中有關JSON定義的基本單元,其包含一對兒(Key/Value)數值。它對外部(External: ? 應用toString()方法輸出的數值)調用的響應體現為一個標準的字符串(例如:{"JSON": "Hello, World"},最外被大括號包裹,其中的Key和Value被冒號":"分隔)。其對于內部(Internal)行為的操作格式略微,例如:初始化一個JSONObject實例,引用內部的put()方法添加數值:new JSONObject().put("JSON", "Hello, World!"),在Key和Value之間是以逗號","分隔。Value的類型包括:Boolean、JSONArray、JSONObject、Number、String或者默認值JSONObject.NULL object 。 JSONStringer:json文本構建類 ,根據官方的解釋,這個類可以幫助快速和便捷的創建JSON text。其最大的優點在于可以減少由于 格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。。其最大的優點在于可以減少由于格式的錯誤導致程序異常,引用這個類可以自動嚴格按照JSON語法規則(syntax rules)創建JSON text。每個JSONStringer實體只能對應創建一個JSON text。 JSONArray:它代表一組有序的數值。將其轉換為String輸出(toString)所表現的形式是用方括號包裹,數值以逗號”,”分隔(例如: ? ? [value1,value2,value3],大家可以親自利用簡短的代碼更加直觀的了解其格式)。這個類的內部同樣具有查詢行為, ? ? get()和opt()兩種方法都可以通過index索引返回指定的數值,put()方法用來添加或者替換數值。同樣這個類的value類型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默認值JSONObject.NULL object。JSONTokener:json解析類?
JSONException:json中用到的異常?
activity:
/*** Demo描述: * 1 利用Volley獲取JSON數據* 2 利用Volley異步加載圖片* 1 利用NetworkImageView加載網路圖片* * 參考資料:* 1 http://blog.csdn.net/t12x3456/article/details/9221611* 2 http://blog.csdn.net/xyz_lmn/article/details/12063561* 3 http://blog.csdn.net/lfdfhl/article/details/12221875* Thank you very much*/ public class MainActivity extends Activity { private ImageView mImageView; private NetworkImageView mNetworkImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ mImageView=(ImageView) findViewById(R.id.imageView); mNetworkImageView=(NetworkImageView)findViewById(R.id.networkImageView); getJSONByVolley(); loadImageByVolley(); showImageByNetworkImageView(); } /*** 利用Volley獲取JSON數據*/ private void getJSONByVolley() { RequestQueue requestQueue = Volley.newRequestQueue(this); String JSONDataUrl = "http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json"; final ProgressDialog progressDialog = ProgressDialog.show(this, "This is title", "...Loading..."); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.GET, JSONDataUrl, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { System.out.println("response="+response); if (progressDialog.isShowing()&&progressDialog!=null) { progressDialog.dismiss(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { System.out.println("sorry,Error"); } }); requestQueue.add(jsonObjectRequest); } /*** 利用Volley異步加載圖片* * 注意方法參數:* getImageListener(ImageView view, int defaultImageResId, int errorImageResId)* 第一個參數:顯示圖片的ImageView* 第二個參數:默認顯示的圖片資源* 第三個參數:加載錯誤時顯示的圖片資源*/ private void loadImageByVolley(){ String imageUrl="http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg"; RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20); ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lruCache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lruCache.get(key); } }; ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache); ImageListener listener = ImageLoader.getImageListener(mImageView, R.drawable.ic_launcher,R.drawable.ic_launcher); imageLoader.get(imageUrl, listener); } /*** 利用NetworkImageView顯示網絡圖片*/ private void showImageByNetworkImageView(){ String imageUrl="http://avatar.csdn.net/6/6/D/1_lfdfhl.jpg"; RequestQueue requestQueue = Volley.newRequestQueue(this); final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20); ImageCache imageCache = new ImageCache() { @Override public void putBitmap(String key, Bitmap value) { lruCache.put(key, value); } @Override public Bitmap getBitmap(String key) { return lruCache.get(key); } }; ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache); mNetworkImageView.setTag("url"); mNetworkImageView.setImageUrl(imageUrl,imageLoader); } }XML布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.android.volley.toolbox.NetworkImageView android:id="@+id/networkImageView" android:layout_width="120dip" android:layout_height="120dip" android:layout_centerHorizontal="true" android:layout_marginTop="30dip" /> <ImageView android:id="@+id/imageView" android:layout_width="120dip" android:layout_height="120dip" android:layout_centerInParent="true" /> </RelativeLayout>
總結
以上是生活随笔為你收集整理的Android利用Volley异步加载(JSON和图片)完整示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android自定义控件之仿美团下拉刷新
- 下一篇: Android图片查看支持双击放大缩小、