如何在我的代码中实现AsyncTask。

时间:2014-02-21 23:08:18

标签: android android-asynctask

我是Android和编程的初学者,我有一个与我的工作相关的个人项目,它基本上是对现有数据库的一组查询。

其中一个查询需要太长时间,我需要实现asyntask方法并在屏幕上加载。我已经阅读了各种示例(复杂和复杂)但我无法在我的项目中实现,所以我来这里向社区寻求帮助,指导我正确放置代码

简而言之,这是我的代码

这是我的主要活动,有一个按钮点击事件和两个edittext两个搜索。

Button button = (Button)vendas.findViewById(R.id.pesquisa);
        Button button1 = (Button)vendas.findViewById(R.id.ven_revisoes);
        button.setOnClickListener(new View.OnClickListener() {

          @Override
          public void onClick(View view) {

                Intent intent = new Intent(getActivity(), VendasActivity.class);
            EditText editText = (EditText) vendas.findViewById(R.id.edittxt2);
            EditText editText1 = (EditText) vendas.findViewById(R.id.edittxt1);
            String message = editText.getText().toString();
            String message1 = editText1.getText().toString();
            intent.putExtra(EXTRA_MESSAGE, message);
            intent.putExtra(EXTRA_MESSAGE1, message1);
            startActivity(intent);
        }
    });

我的VendasActivity.class,我必须实现AsyncTask并加载消息

VendasDataSource datasource;
private List<Venda> vendas;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_vendas);

    Intent intent = getIntent();
    String message = intent.getStringExtra(Vendas.EXTRA_MESSAGE);
    String message1 = intent.getStringExtra(Vendas.EXTRA_MESSAGE1);

    datasource = new VendasDataSource(this); // datasource class
    datasource.open();


vendas = datasource.find("Select.... // my long query

//my custom list

ArrayAdapter<Venda> adapter = new VendaListAdapter(this, vendas);
setListAdapter(adapter);
}

我的数据源类

public List<Venda> find(String select) {

    String query = (select);

    Cursor cursor = database.rawQuery(query, null);

    Log.i(LOGTAG, "Returned " + cursor.getCount() + " rows");

    List<Venda> vendas = cursorToList(cursor);
    return vendas;
}

private List<Venda> cursorToList(Cursor cursor) { // MY LIST
    List<Venda> vendas = new ArrayList<Venda>();
    if (cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            Venda venda = new Venda();

                     venda.setid(cursor.getLong(cursor.getColumnIndex.......
vendas.add(venda);
        }
    }

    return vendas;
}

我在哪里放置AsyncTask的代码...提前感谢

1 个答案:

答案 0 :(得分:0)

VendasActivity 中,您应该创建&amp;执行AsyncTask(让我们称之为 DataAsyncTask ):

 DataAsyncTask dataAsyncTask = new DataAsyncTask();
 dataAsyncTask.execute(query); //query is your query string

DataAsyncTask应该是 VendasActivity的内部类,并且将具有或多或少的结构(假设您希望它在完成后输出List<Venda>

 private class DataAsyncTask extends AsyncTask<String, String, List<Venda>> {

      protected List<Venda> doInBackground(String... query) {
            String queryString = query[0];

            //TODO: add your long running database code here...
      }

      @Override
      protected void onPostExecute(List<Venda> vendaList) {

           Log.i(LOGTAG, "vendaList: " + vendaList);
      }
 }

有关详细信息,建议您阅读AsyncTask here

的文档