调用Asynctask以void和cursor作为参数执行

时间:2014-03-16 11:15:53

标签: android android-asynctask

我写了一个Asynctask as

private class dboperation extends AsyncTask<Void, Void, Cursor>

我是Android的新手并且通过在谷歌中搜索了很多但是对于如何使用这些参数从另一个类调用异步任务感到惊讶。

代码

private class dboperation extends AsyncTask<Void, Void, Cursor>{


        @Override
        protected Cursor doInBackground(Void... params) {
            // TODO Auto-generated method stub
            getstocks="Select " + st.column1 + " as _id, " + st.column3 + " From "+ st.tablename;
            a1=Database.getInstance(getApplicationContext()).getWritableDatabase().rawQuery(getstocks, null);


            return null;
        }


        protected void onPostExecute(Cursor result) {
            if(a1.moveToNext())
            {
                displaystocks.setVisibility(View.INVISIBLE);
            }
            final poplist populatestocks=new poplist(getApplicationContext(),a1) ;
            popstocks.setAdapter(populatestocks);
        }

        @Override
        protected void onPreExecute() {
        }

        protected void onProgressUpdate(Void... values) {
        }


    }

当我这样打电话时,它会给我错误&#34; Void无法解析为变量&#34;。

dboperation.execute(Void,Void,a1);

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:5)

在     的AsyncTask

  • 第一个参数表示您可以传递执行的类型。虚空意味着你什么都不能通过

Java中的类名应该以upper-calse字母开头。请重命名,以便其他人更好地阅读。

正确的呼叫将是

new DbOperation().execute();
  • 第二个参数是一种可以从doInBackground()调用publishProgress()的数据。你没有使用publishProgress,所以在这种情况下没有什么可说的。

  • 将传递给onPostExecute()的第3个param meana类型。要将Cursor传递给onPostExecute,必须从doInBackground

    返回它
    @Override
    protected Cursor doInBackground(Void... params) {
    
        getstocks="Select " + st.column1 + " as _id, " + st.column3 + " From "+ st.tablename;
        return Database.getInstance(getApplicationContext()).getWritableDatabase().rawQuery(getstocks, null);
    }
    

答案 1 :(得分:1)

   AsyncTask<Void, Void, Void>

asynkTask类获取三个参数。用于doInBackground的第一个参数,如果要从活动类或其他任何地方向此类发送一个参数,则必须在Execute方法中作为参数发送。喜欢:

boperation.execute(a1);

用于onProgressUpdate()方法的第二个值,您可以向用户显示进度。

用于onPostExecute()的第三个值,您希望在完成某些工作后使用UI线程进行操作。

现在,如果你想将send方法发送到onPostExecute(),你需要在doInBackground方法中使用返回值,例如:

@Override
protected Cursor doInBackground(Void... params) {
            // TODO Auto-generated method stub
            getstocks="Select " + st.column1 + " as _id, " + st.column3 + " From "+ st.tablename;
            a1=Database.getInstance(getApplicationContext()).getWritableDatabase().rawQuery(getstocks, null);


            return YourCursor;
        }

并且在onPostExecute()方法中,您必须具有以下内容:

 protected void onPostExecute(Cursor result) {
            if(a1.moveToNext())
            {
                displaystocks.setVisibility(View.INVISIBLE);
            }
            final poplist populatestocks=new poplist(getApplicationContext(),a1) ;
            popstocks.setAdapter(populatestocks);
        }

因此,如果您不想向asyncTask类发送任何内容,则必须致电

 new boperation.execute();

或者您可以创建一个对象并调用execute方法,如:

boperation object = new boperation();
object.execute();