-
我们发现异步加载出现图片错位的情况,图片的排列顺序有问题。 图片显示错位的原因:ListView自身的缓存机制。正确的ListView没有显示正确的URL。 解决办法:在适配器中给每一个图片设置一个标识Tag,Tag本身就是图片对应的url,也就是将图片和 url 进行了绑定。 如图,只有当Tag等于图片自身的url的时候才加载图片,否则保持原样。避免了缓存图片对正确图片的影响。查看全部
-
在子线程中将Bitmap以message的形式发送出去: Bitmap bitmap = getBitmapFromURL(url);//从 url中获取 bitmap。 Message message = Message.obtain();//此方法使用现有的、已回收的Message,提高Message的使用效率。 message.obj = bitmap;//将信息的内容(obj)设置为 bitmap。 handler.sendMessage(message);//调用Handler将载有bitmap的Message发送出去。 注意这里的 Handler 要选择android.os.Handler的。查看全部
-
将图片的地址 urlString 转变为 Bitmap。 基本上和网络相关的操作都需要捕捉异常。 1. 将 urlString(字符串类型)转变为 URL 类型对象url。 2. 通过 url 获取连接对象 connection。方法:url.openConnection()。 3. 通过连接对象获得输入流,并用BufferedInputStream包装: is = new BufferedInputStream(connection.getInputStream()); 4. 将输入流解析为Bitmap:bitmap = BitmapFactory.decodeStream(is); 5. 释放资源:connection.disconnect(); is.close();查看全部
-
逻辑梳理: 首先在 onCreate()方法中通过 new NewsAsyncTask().execute(URL) 将一个URL传递进去,实现对这个URL的异步访问。URL传递给方法 getJsonData(),通过该方法将URL对应的Json格式数据转化为我们所封装的NewsBean对象。获得的NewsBean对象在 onPostExecute()方法中传递给自定义的适配器 NewsAdapter,通过NewsAdapter构造了一个ListView的数据源,并将数据源加载给了ListView。从而让ListView显示我们想要的数据。查看全部
-
最后在 onPostExecute()方法中将生成的 newsBean添加到 mListView:通过适配器加载: NewsAdapter adapter = new NewsAdapter(MainActivity.this,newsBeen); mListView.setAdapter(adapter);查看全部
-
getView()的重写 1. 采取文艺式,在getView()之外创建一个内部类 ViewHolder 封装 Item 的三个控件。 2. 在getView()中定义ViewHolder对象 viewHolder。 3. 重点: (1)判断 convertView是否为空,为空则初始化 viewHolder,使用 LayoutInflate的 inflate()方法将布局文件转换为View对象赋值给 convertView。用过 convertView 的findViewById()方法初始化 viewHolder 的三个控件。最后别忘了建立起 convertView和 viewHolder 的关系:convertView.setTag(viewHolder); 如果 convertView 不为空,则取出 ViewHolder:viewHolder = (ViewHolder) convertView.getTag(); (2)给viewHolder的三个控件赋值,这里的图片先设置默认图标,真正的图标将在异步加载中实现。 (3)返回 convertView。查看全部
-
将JSON格式数据转变为 NewsBean对象,添加到List。 1. 获得 Json 的Object对象:jsonObject = new JSONObject(jsonString); 2. 获得 Json 数组(数组名叫data):JSONArray jsonArray = jsonObject.getJSONArray("data"); 3. 使用for循环,遍历这个数组,将数组的每一个元素都转变为 NewsBean对象,然后将NewsBean对象添加到 List。查看全部
-
格式转换:将 JSON 字符串转换为我们想要的数据。这里仅仅先实现字符串的获取。其中 Log.d("xys",jsonString)是把json字符串以日志的形式打印出来。 InputStream is由 new URL(url).openStream()获得。此句功能与url.openConnection.getInputStream()相同,可根据URL直接联网获取网络数据,简单粗暴!返回值类型为InputStream。 另外,不要忘记在配置文件中添加网络权限:<uses-permission android:name="android.permission.INTERNET"></uses>查看全部
-
通过inputStream读取网页信息。 我们定义一个方法用于读取输入流: public String readStream(InputStream is){ InputStreamReader isr; String result=""; try { String line=""; isr = new InputStreamReader(is,"utf-8"); BufferedReader br = new BufferedReader(isr); while((line = br.readLine())!=null){ result += line; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; } 其中,传进参数InputStream is 是字节流,InputStreamReader(is,"utf-8")将字节流转化为字符流,再通过BufferedReader封装,以BufferedReader形式读取出来,最终拼接到字符串result里面。这样就完成了整个数据的读取。 既然读取了JSON字符串,接下来把它转换为我们想要的数据。查看全部
-
http://www.imooc.com/api/teacher?type=4&num=30上面的JSON数据便是我们所要异步加载的数据。 要点: 1. 获取JSON格式数据,再把JSON格式的数据转化成我们所需要的数据,加载到 ListView 里面。 2. 创建新的类NewsBean,用于封装JSON格式的数据。每一个NewsBean都代表一行数据。在doInBackground()中的第三个参数便设置为List<NewsBean>,接下来List<NewsBean>会传到adapter(适配器)中,最后加载给ListView,就可以在界面上显示出JSON数据所代表的内容信息。 3. 在AsyncTask的 doInBackground() 中获取到传递进来的URL,也就是JSON数据所在的网址。通过API返回JSON格式的数据,并由此构造出由NewsBean组成的List。查看全部
-
本节主要是Item布局的编程,还有主界面的编程。 主界面就是一个Listview,主要在于 item_layout.xml 的编写。 在TextViwe中设置最大行数是为了防止在文字过多的情况下出现变形。查看全部
-
Android异步加载 异步加载:用异步的方式加载数据,原因无非两个:1.提高用户体验,用户在加载数据的时候不会感觉到明显的卡顿;2.安卓的要求。 异步加载最常用的两种方式:多线程\线程池;AsyncTask。 其中AsyncTask的底层也是通过线程池实现,所以二者异曲同工。查看全部
-
获取json数据查看全部
-
Cache可以认为是一个Map查看全部
-
sizeOf在每次加入内存缓存的时候进行调用查看全部
举报
0/150
提交
取消