最近在一个项目中需要下载服务器数据,本来是自己写个线程,后来发现2.3后有个Downloadmanager类可以用,这个类功能实在强大,进度条有,下载完了也会发出广播,还能得到有关下载任务的任何信息,实在方便,这里介绍下我用到的一些功能吧。
首先,要下载东西的话,把下载地址给downloadmanager就可以了,如下
DownloadManager downloadManager = (DownloadManager)
getSystemService(DOWNLOAD_SERVICE);
File file = new File(dstPath);
Uri dstUri = Uri.fromFile(file);
DownloadManager.Request dwreq = new DownloadManager.Request(
uri);
dwreq.setDestinationUri(dstUri);
downloadManager.enqueue(dwreq);剩下的就不用我们管了,如果我们要获得这个下载的信息,Query这个类就好了,可以看看文档。
我这里想收到下载完成的广播后查看下刚刚下载完的这个东西是什么,这么实现的:
DownloadManager dm = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
long downloadId = getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
Query query = new Query();
query.setFilterById(downloadId);
Cursor cur = dm.query(query);
if (cur.moveToFirst()) {
int columnIndex = cur.getColumnIndex(DownloadManager.COLUMN_STATUS);
if (DownloadManager.STATUS_SUCCESSFUL == cur.getInt(columnIndex)) {
String uriString = cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));}具体什么意思,大家看看文档就明白了,这里不再赘述了。 viewpager放在scrollview中时,滑动viewpager里的内容会不顺畅,原因是稍微有点上下的动作就会被scrollview截去了,为了解决这个问题,重写了scrollview里的方法,顺利解决。也就是重写onInterceptTouchEvent方法,定义方法判断viewpager上的滑动的动作不会被scrollview截去。
下面是重写scrollview的源码:
public class MyScrollView extends ScrollView {
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
setFadingEdgeLength(0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
// Return false if we're scrolling in the x direction
class YScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(Math.abs(distanceY) > Math.abs(distanceX)) {
return true;
}
return false;
}
}
}方法一:排序法
把要删除的索引从大到小排列。
从元素的索引大的元素开始向索引小的元素顺序删除。(后面的元素删除不回影响索引小的元素)
方法二:替换删除标志法
NSString * aObj = @"";//替换删除标志
for (int i = 0; i < count; i++)//因为第一位不能编辑所以要去除第一位的搜索
{
NSInteger index = [array index];//数组存的对象是indexPath,就是每个cell的地址,通过它可以索引到它在tableview的位置。
[dataArray replaceObjectAtIndex:index withObject:aObj];
}
[dataArray removeObject:aObj];