从另一个Activity检查AsyncTask的状态

时间:2017-01-09 08:00:30

标签: android android-asynctask

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

我的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) {

    }
}

如何从其他活动中查看其状态?

3 个答案:

答案 0 :(得分:1)

方式1:

制作Constance class并更改该类的值,并在另一项活动中检查该值是否为新值

方式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外观library documents on github

的详细信息

答案 1 :(得分:0)

通过使用听众。请遵循本指南。 https://guides.codepath.com/android/Creating-Custom-Listeners

答案 2 :(得分:0)

您可以将返回变量设置为&#34;公共静态&#34; ,从当前活动类中调用公共静态变量并显示其上一个类的值。

注意:如果先前的活动类被刷新或销毁,使其值为null,则该值将减少,从中您可能会获得NullPointerException