为了账号安全,请及时绑定邮箱和手机立即绑定

Android必学-异步加载

难度中级
时长 1小时57分
学习人数
综合评分9.70
220人评价 查看评价
9.9 内容实用
9.7 简洁易懂
9.5 逻辑清晰
  • 异步加载——实现ListView图文混排逻辑总结 第一步 onCreate中new一个NewsAsyncTask 将url传递给getJsonData 实现异步访问 第二步 getJsonData将url转换为NewsBean对象 第三步 onPostExecute讲NewsBean的数据传递给NewsAdapter 第四步 NewsAdapter构造一个ListView数据源 并将数据源设置给ListView 异步加载的第一层:通过AsyncTask访问网络,获取json或者XML字符串,然后解析他们产生若干object,将每个object放入到ListVIew中(adapter需要使用view holder pattern去写),AsyncTask中的访问网络获取json或者XML字符串,并且产生若干个object的工作就是在doInBackground()方法中进行的,所以这个方法总的来说就是用来准备数据源的。
    查看全部
    0 采集 收起 来源:逻辑梳理

    2016-07-14

  • 本节课目标:文艺方式重现BaseAdpter 1、自定义Adpter继承BaseAdpter; 2、定义变量:List<NewsBean>;LayoutInflater; 3、重写构造函数NewsAdpter(Context context, List<NewsBean> data)。 4、文艺方式重写getView()方法。 4.1、自定义类ViewHolder,映射相关的view对象
    查看全部
  • 异步加载 1. 主线程中不能做耗时操作,只能更新UI 下面的例子 2. 获取jsonData url = http://www.imooc.com/api/teacher?type=4&num=30 下面的openStream参数是从URL参数中new URL(url).openStream()获取的。 private String readStream(InputStream openStream) { InputStreamReader isr; String result = ""; try { String line = ""; //将InputStream类的字节流转换成字符流 isr = new InputStreamReader(openStream, "utf-8"); //转存在BufferedReader中 BufferedReader br = new BufferedReader(isr); while((line = br.readLine())!=null) { result+=line; } } return result; } InputStream is=new URL(url).openStream() ---------------new URL(url).openConnection().getInputStream() Json字符串string的处理: JSONObject jsonObject=new JSONObject(jsonstring) JSONArray jsonArray =jsonObject.getJSONArray("数组名") JSONObject object=jsonArray.getJsonObject(i) object.get("")属性名
    查看全部
  • 3. 解析json数据到List<NewsBean>中 jsonobject=new JsonObject(jsonString); jsonArray=jsonobject.getjsonArray("data"); NewsBean newsBean; (如图),通过如下for循环就可以将jsonString原始字符数据导入到每个NewsBean对象中。 for (int i = 0; i<jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); newsBean = new NewsBean(); //从jsonObject中得到每个元素数据给newsBean newsBean.image = jsonObject.getString("picSmall"); newsBean.title = jsonObject.getString("name"); newsBean.content = jsonObject.getString("description"); newsBeanList.add(newsBean); } 最后通过newsBeanList.add(newsBean)组成一个List<NewsBean>对象,这是构成Adapter适配器的原始数据。
    查看全部
  • 利用异步加载来实现json格式的获取: 首先定义异步加载类来获取json数据 jsonString数据的获取需要用到InputStream 构造ReadStream(InputStream is )得到String 数据 传给jsonString : 1、InputStremReader 读取 InputStream 2、转为BufferedStream 便于修改 3、逐行读取数据line = br.readline() 只要 line !=null -->result +=line 4、return result 获取到的json数据封装成Bean格式之后再传给Adapter(下一节)
    查看全部
    0 采集 收起 来源:获取Json数据

    2018-03-22

  • 一、如何通过Url获取网络反馈的Json字符串结果: 1、重写doInBackground(Params…) 获取请求的网址,调用自定义方法getJson(String url); 2、自定义方法getJson中定义URL,获取inputStream流 3、自定义方法readStream(InputStream is),将inputStream流中的字节流拼装成字符串; 4、自定义方法getJson调用readeStream()方法,并将InputStream流作为参数传递。这样既可获得json串结果。 通过InputStream读取一个网络信息。<br> 1.InputStream字节流,通过InputStreamReader(-,"utf-8")指定其格式将字节流转化为字符流。<br> 2.再通过BufferedReader将这样一个字符流以Buffer的形式读取出来,最终拼接到result里面,这样就完成了整个数据的读取
    查看全部
    0 采集 收起 来源:获取Json数据

    2018-03-22

  • 布局文件
    查看全部
    1 采集 收起 来源:创建布局

    2016-07-14

  • 什么是异步加载:就是用异步的方式去加载数据 使用异步加载的原因 1.android是单线程模型 2.耗时操作都必须放在单独的线程中去做,而不能去阻塞UI线程 异步加载最常用的两种方式 1.多线程\线程池 2.AsyncTask(底层也是基于线程池来实现的)
    查看全部
  • 获取bitmap
    查看全部
  • 获取json
    查看全部
    0 采集 收起 来源:获取Json数据

    2016-07-12

  • 读取json数据
    查看全部
    0 采集 收起 来源:获取Json数据

    2016-07-12

  • API接口:www.imooc.com/api/teacher?type=48&num=30
    查看全部
    0 采集 收起 来源:AsyncTask分析

    2018-03-22

  • layout中限制行数使用maxLines
    查看全部
    0 采集 收起 来源:创建布局

    2016-07-07

  • 异步加载——LruCache缓存 (接上一笔记) (3)改写showImageByAsyncTask()和doInBackground() bitmap不在缓存中时才下载;下载完之后保存在cache中。 public void showImageByAsyncTask(ImageView imageView, String url){ //从缓存中获取对应的图片并判断 Bitmap bitmap = getBitmapFromCache(url); if(bitmap == null){ new NewsAsyncTask(imageView, url).execute(url); }else { //从缓存中直接获取数据让iamgeView显示 imageView.setImageBitmap(bitmap); } } protected Bitmap doInBackground(String... params) { String url = params[0]; Bitmap bitmap = getBitmapFromURL(url); if(bitmap!=null){ addBitmapToCache(url, bitmap); } return bitmap; } (4)最后要在创建Adapter对象时给ImageLoader的对象初始化,直接使用该对象。这样不会每次都创建LruCache。 public NewsAdapter(Context context, List<NewsBean> mListData) { super(); this.mList = mListData; mInflater = LayoutInflater.from(context); mImageLoader = new ImageLoader(); } //通过AsyncTask执行显示ImageView额操作 mImageLoader.showImageByAsyncTask(viewHolder.imageView, urlString);
    查看全部
    0 采集 收起 来源:LruCache缓存(下)

    2018-03-22

  • 异步加载——LruCache缓存 1. Lrc——Least Recently Used,LruCache类来实现缓存算法。 LruCache类将内容保存在内存中,并以一定的方法管理这些内容,来实现缓存管理。 2. LrcCache本质是一个Map,底层是通过HashMap实现的。 所以在使用LruCache时可以通过调用set()和get()方法使用。 3. 使用步骤: (1)先创建一个LruCache,并在构造函数中初始化它。 注意:通过匿名内部类的方式实现sizeOf()方法,sizeOf()方法用来获取每次缓存的对象的大小,默认返回元素的个数。sizeOf()方法在每次元素加入缓存时调用。 private LruCache<String, Bitmap> mLruCache; public ImageLoader() { //通过Runtime类获取运行时最大内存 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory/4; mLruCache = new LruCache<String, Bitmap>(cacheSize){ protected int sizeOf(String key, Bitmap value) { return value.getByteCount(); }};} (2)两个set()和get()方法,分别是加入元素到缓存以及从缓存中获取数据 public void addBitmapToCache(String url, Bitmap bitmap){ if(getBitmapFromCache(url)==null){ mLruCache.put(url, bitmap); } } public Bitmap getBitmapFromCache(String url){ return mLruCache.get(url); } (3)改写showImageByAsyncTask()和doInBackground() (如图)bitmap不在缓存中时才下载;下载完之后保存在cache中。 (4)最后要在创建Adapter对象时给ImageLoader的对象初始化,直接使用该对象。这样不会每次都创建LruCache。
    查看全部
    0 采集 收起 来源:LruCache缓存(下)

    2018-03-22

举报

0/150
提交
取消
课程须知
1、了解异步处理的一般方法 2、掌握如何使用多线程进行异步加载 3、掌握如何使用ASyncTask进行异步加载 4、异步加载的缓存与优化
老师告诉你能学到什么?
本课程是Android中级课程 1、熟练掌握基本的Android应用程序开发方法

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!