所以我只想创建一个警报对话框,它只是一条消息(没有按钮或标题)。我想在后台任务运行时显示警告对话框。警报对话框将在UI线程上运行。
这是我到目前为止所做的事情:
protected void onPreExecute() {
super.onPreExecute();
AlertDialog altDlg;
altDlg = new AlertDialog.Builder(AlertDialogActivity.this).create();
altDlg.setMessage("Retrieving Information. Please Wait");
altDlg.show();
}
我也试过这样做:
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setMessage("Retrieve Info. Please Wait").show();
我得到的第一个错误是:
cannot find symbol 'AlertDialogActivity'
symbol: class AlertDialogActivity
location: class com.example.Device.Activity
第二次尝试错误说:
incompatible types: com.example.Device.Activity cannot be converted to android.content.Context
我不确定在两种情况下我做错了什么。我只是想在后台任务运行时显示基本消息,我希望最接近的事情是AlertDialog。
编辑如何正确设置AsyncTask:
我想做的小背景。我只想读取文件,反序列化并将其内容保存到数据库中。
现在我假设我只需要两个活动。
一个是我的主要活动:
public class MainActivity extends Activity {
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setup);
final Button setup_button = (Button) findViewById(R.id.setup_button);
setup_button.setOnClickListener (new View.OnClickListener() {
public void onClick(View view){
setContentView(R.layout.retrieve_info);
}
});
}
}
现在onClick事件只会移动到新视图,该视图应该显示消息或警告对话框,其中显示检索信息。请耐心等待。它在读取文件并保存到db时显示消息。读取并保存文件后,该消息应消失,并说出设置完成等信息。
到目前为止,我的第二项活动是:
public class RetrieveInfoActivity extends AsyncTask<Void,Void,Void> {
private ProgressDialog progressBar;
private void retrieveInfo(String fileName) {
try {
File file = new File(fileName);
Scanner scanner = new Scanner(file);
//Read all the lines until there are no more lines
while (scanner.hasNextLine()) {
scanner.nextLine();
//TODO: deserialize and save to db
}
scanner.close();
}
catch (FileNotFoundException e) { e.printStackTrace(); }
}
@Override
protected Void doInBackground(Void... params) {
retrieveInfo("test.txt");
return null;
}
protected void onPreExecute() {
super.onPreExecute();
progressBar.setIndeterminate(true);
progressBar.setCancelable(false);
progressBar.setMessage("Retrieve Information.Please wait");
progressBar.show();
}
@Override
protected void onPostExecute() {
progressBar.dismiss();
}
}
到目前为止我真正拥有的一切。我只需要了解如何在Android中进行概念设置。
希望这是有道理的。
答案 0 :(得分:0)
试试这个:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
答案 1 :(得分:0)
而不是使用AlertDialog使用ProgressBar,它将为您提供帮助。
private ProgressDialog progressBar;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setIndeterminate(true);
progressBar.setCancelable(false);
progressBar.setMessage("Your message");
progressBar.show();
}
@Override
protected void onPostExecute(final String error_code) {
progressBar.dismiss();
}
答案 2 :(得分:0)
看起来您正在扩展AsyncTask并尝试将其用作上下文。因为AsyncTask本身只是一个抽象类,所以不会起作用。
您需要为AsyncTask创建一个自定义构造函数来获取Context:
public class MyTask extends AsyncTask<Void, Void, Void> {
private Context mCtx;
public MyTask(Context context) {
mCtx = context;
}
...
然后在启动AsyncTask时,传递上下文:
new MyTask(this).execute();
另一种方法是使AsyncTask成为内部类,并在创建对话框时使用YourActivity.this
。例如:
public class YourActivity extends Activity {
...
private class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
AlertDialog dialog = new AlertDialog.Builder(YourActivity.this).create();
}
@Override
protected Void doInBackground(Void... params) {
...
}
}
}