Android LoadManager无法回调onLoadFinish问题

前言


Android LoadManager是3.0之后引入的,现在都8.0了,项目中可以不用考虑低版本的适配,完全可以使用,我项目中用的比较多,近期发现,LoadManager 有时无法回调onLoadFinish的方法.


解决方法

重载onStartLoading方法
加入forceLoad()(意思是强制执行)强制执行该回调方法
package com.contentproviderdb;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.content.AsyncTaskLoader;

/**
 * Created by sdj on 2017/9/7.
 */

public class LoadInstance extends AsyncTaskLoader<User> {
    private User user;
    private Context context;
    private static final String URIS = "content://com.contentproviderdb.TestContentProvider";

    public LoadInstance(Context context) {
        super(context);
        this.context = context;
        user = new User();
    }

    @Override
    public void stopLoading() {
        super.stopLoading();
        cancelLoad();
    }

    @Override
    protected void onStartLoading() {
        super.onStartLoading();
        forceLoad();
    }

    @Override
    public User loadInBackground() {
        Uri uri = Uri.parse(URIS);
        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
        if (null != cursor && cursor.getCount() > 0) {
            StringBuilder stringBuilder = new StringBuilder("用户列表如下:\n");
            while (cursor.moveToNext()) {
                stringBuilder.append(cursor.getString(cursor.getColumnIndex("userName")) + " 密码= " + cursor.getString(cursor.getColumnIndex("userPwd")) + "\n");
            }
            user.setUserName(stringBuilder.toString());
        }
        return user;
    }
}


参考相关资料链接如下:




小彩蛋



LoadManager有在android.app.包下面的LoadManager和android.support.v4包下的LoadManager,这两个有什么区别吗,答案是肯定的.
因为android.app.LoadManager是在android 3.0(API 11)上引入的,所以3.0之前的手机使用loadManager会报错的。

大家都知道,android版本升级后, google官方会提供Android Support Library package 系列的包来保证高版本sdk开发的向下兼容性,下面是一些注意事项:

gradle引用appcompat-v7包的时候就不需要引用v4了,因为v7里默认包含了v4包;

compile ‘com.android.support:appcompat-v7:21.0.3’ 中的21代表API level 21推出的兼容包.

v4包冲突这个错误:多个module所引用的v4包版本不一致造成的; 把其他module的v4包修改成主module所使用的v4包即可!

support-v4

用在API lever 4(即Android 1.6)或者更高版本之上。它包含了相对更多的内容,而且用的更为广泛,例如:Fragment,NotificationCompat,
LoadBroadcastManager,ViewPager,PageTabAtrip,Loader,FileProvider 等

Gradle引用方法:

compile 'com.android.support:support-v4:21.0.3'

support-v7

这个包是为了考虑API level 7(即Android 2.1)及以上版本而设计的,但是v7是要依赖v4这个包的,v7支持了Action Bar以及一些Theme的兼容。

Gradle引用方法:

compile 'com.android.support:appcompat-v7:21.0.3'

所以说,建议大家还是使用V4包的Fragment和loadManager,基本系统1.6以上的平台都是可以做到兼容的.

谷歌新出的一些控件,大家也是可以用的,比如Android O 8.0里面的ResizeTextView,都是可以用到项目中的,谷歌

的向下兼容包可以到官网去查看引用,这样不会用存在版本上的问题!







发布了60 篇原创文章 · 获赞 109 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/shenshibaoma/article/details/77892273