asyncTask值不通过

时间:2013-08-06 18:17:57

标签: android android-asynctask

当我在结果活动中检索值时。我什么都没得到,我想这个值没有从doInBackground传递到onPostExecute。知道什么是错的吗?或者我是以错误的方式传递它

 class calculateTask extends AsyncTask<String, String, String>
 {
      @Override
        protected String doInBackground(String... params) {
             Thread t= new Thread();
                try {
                    t.sleep(10000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            int pix=0;
            int circ=0;
            int width1=mBitmap.getWidth();
            int height1=mBitmap.getHeight();

            for(int i=0;i<width1;i++)
            {
            for(int j=0;j<height1;j++)
            {

            if(mBitmap.getPixel(i, j)==Color.WHITE)
            {

                pix++;
            }

            if(mBitmap.getPixel(i, j)==Color.LTGRAY)
            {
                circ++;
            }
            }
            }
               int percentage=100-((pix-circ))*100  ;
            String p=intToChar(array,percentage);



            return p;

        }
        @Override
        protected void onPostExecute(String p) {


        Intent i= new Intent(circle1.this,results.class);

        i.putExtra("perc", p);

        startActivity(i);

            //super.onPostExecute(result);
        }

    }
    public String intToChar(char[] array, int pix) {
        // TODO Auto-generated method stub
         String b="";
            int i = array.length - 1;
            while (pix > 0 && i >= 0) {
                array[i--] = (char) (48 + pix % 10);
                pix /= 10;
            }     b = new String(array);

            return b;
    }

1 个答案:

答案 0 :(得分:0)

我会使用全局变量。然后将值赋给doInBackground中的全局变量,然后在onPostExecute中检索它。

编辑: 很多事情都错了。

以下是我的代码

中的一个示例
private class Load extends AsyncTask<Void, Void, Void>
    {
    private ProgressDialog progressDialog;
    private Context context;
    private boolean internet, refresh;

    public Load(Context context, boolean internet, boolean refresh)
    {
        this.internet = internet;
        this.refresh = refresh;
        this.context = context;
    }

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(context, null, "Loading data ...");
    }

    @Override
    protected Void doInBackground(Void... voids)
    {
        taskComplete = false;
        while (!taskComplete)
        {
            getData(this.internet);
            try
            {
                Thread.sleep( 1000 );
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {
        super.onPostExecute(result);
        populateData();
        progressDialog.dismiss();
    }
}

试着模仿这个。完成后,getData将taskComplete设置为true。