我是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的代码...提前感谢
答案 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
的文档