从另一个Activity检查AsyncTask的状态

5

我正在使用AsyncTask将图像转换为base64值。该任务在后台运行,应用程序移动到下一个活动。如何检查AsyncTask的状态以检查它是否已完成...

我的异步任务代码...

public class Asyncimg extends AsyncTask<Void, Integer, String>
{
    //for converting images to base64

    protected void onPreExecute (){
        //disbaling sync button on converting pic to base64

    }

    protected String doInBackground(Void...arg0) {
        Cursor cursor = mydb.getDat1();
        //fetching the image location
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {

            for( int i=0 ;  i< 1 ; i++ )
            {
                if( cursor.getColumnName(i) != null )
                {
                    try
                    {

                        if( cursor.getString(i) != null )
                        {
                            //saving image to bitmap
                            Bitmap bitmap = BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(DBHelper.PHOTO)));
                            //converting it to base64
                            String en= encodeToBase64( resize(bitmap,1080,1920), Bitmap.CompressFormat.JPEG,50);

                            Log.d("base",en);
                            //inserting it to table pic
                            mydb.insertpic(cursor.getInt(1),en);
                        }

                    }
                    catch( Exception ignored)
                    {

                    }
                }
            }
            cursor.moveToNext();
        }

        cursor.close();
        mydb.updatebin();
        return null;
    }
    protected void onPostExecute(String result) {

    }
}

我该如何从另一个活动中检查它的状态?


你需要通过公开一个API/管理器来共享AsyncTask,以便查询所需的信息。你可以在活动之间传递一个引用对象,但最好探索其他选项,比如将其存储在Application类中或类似的地方。 - JoxTraex
3个回答

1

方法1:

创建一个常量类并更改该类中的值,在另一个活动中检查新值。

方法2:

使用Intent并将数据和值放入extras,然后调用activity

方法3:

创建和使用interface监听器。

方法4(看起来不错):

使用EventBus库:https://github.com/greenrobot/EventBus

任何时候您需要通知另一个活动,请通过以下方式发送通知:

    EventBus.getDefault().post("notify param"); 

然后在另一个活动中处理通知:
    @Subscribe(threadMode = ThreadMode.MAIN)  
    public void onMessageEvent("notify param") {/* Do something */};

如需更多关于使用 EventBus 的详细信息,请参考 github上的库文档


你能解释一下处理通知部分吗?它显示错误了吗? - user7315434
哪里出了问题?- 对于 EventBus 库,一定要仔细完整地阅读,这样才能清楚地解释。 - Saeid
你在Gradle中添加库(compile 'org.greenrobot:eventbus:3.0.0')了吗?然后在onResume中注册它,在onStop中取消注册? - Saeid

0

0

你可以将返回变量设置为"公共静态",从当前的Activity类中,你可以调用公共静态变量并显示其来自前一个类的值。

注意:如果前一个Activity类被刷新或销毁,则该值会减少,使其值为null,从而可能导致NullPointerException。


能解释一下吗? - user7315434
例如,@Tom,如果您的异步任务方法在Activity A中声明,则在此处声明变量为public static并初始化其值,当您转到Activity B时,您可以在Activity B中简单地调用它。 ActivityA mActivityA = new ActivityA String getValue = mActivityA.<your variable> - MuTiny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接