Android 为什么从未调用asynctask上的onPostExecute方法
我试图解雇()progressbar对话框,当加载完成时,使用webview中的方法onPostExecute。 我的问题是,当我在AsynTask中运行onPostExecute方法时,是否从未执行 注:我读过Android 为什么从未调用asynctask上的onPostExecute方法,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,我试图解雇()progressbar对话框,当加载完成时,使用webview中的方法onPostExecute。 我的问题是,当我在AsynTask中运行onPostExecute方法时,是否从未执行 注:我读过 public class MainActivity extends AppCompatActivity { WebView webView; EditText edInput; Button btnCari; String url; @Over
public class MainActivity extends AppCompatActivity {
WebView webView;
EditText edInput;
Button btnCari;
String url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
edInput = (EditText) findViewById(R.id.editText);
btnCari = (Button) findViewById(R.id.button);
btnCari.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
asynCaller myTask = new asynCaller();
myTask.execute();
}
});
}
private void loadWeb(String url){
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://"+url);
}
public class asynCaller extends AsyncTask<String, Void, String> {
ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
url = edInput.getText().toString();
progressDialog.show(MainActivity.this,"Pesan","Memuat . . .",true);
}
@Override
protected String doInBackground(String... params) {
publishProgress();
return url;
}
@Override
protected void onPostExecute(String result) {
progressDialog.dismiss();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
loadWeb(url);
}
}
}
public类MainActivity扩展了AppCompatActivity{
网络视图;
编辑文本输入;
按钮btnCari;
字符串url;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=(webView)findviewbyd(R.id.webView);
edInput=(EditText)findViewById(R.id.EditText);
btnCari=(按钮)findViewById(R.id.Button);
btnCari.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
asynCaller myTask=新建asynCaller();
myTask.execute();
}
});
}
私有void loadWeb(字符串url){
webView.getSettings().setJavaScriptEnabled(true);
setWebViewClient(新的WebViewClient());
loadUrl(“https:/”+url);
}
公共类asynCaller扩展AsyncTask{
ProgressDialog=新建ProgressDialog(MainActivity.this);
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
url=edInput.getText().toString();
progressDialog.show(MainActivity.this,“Pesan”,“Memuat…”,true);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
出版进度();
返回url;
}
@凌驾
受保护的void onPostExecute(字符串结果){
progressDialog.disclose();
}
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
loadWeb(url);
}
}
}
myTask.doInBackground(字符串…参数)的返回值的值是多少?如果返回null或者您没有正确实现@Override函数,那么我相信onPostExecute(字符串结果)将不会被调用。?????为什么使用异步任务让webview在更新过程中加载url?我认为这毫无意义。绿色应用是对的。这不是为WebView
实现ProgressDialog
的方式。无论如何,您的问题是,显示的ProgressDialog
不是您要忽略的对话框。您正在使用的show(Context,CharSequence,CharSequence,boolean)
方法是ProgressDialog
的一个静态方法,它返回显示的实例,但您没有保留对该实例的引用,而是取消在异步任务顶部初始化的实例,但这一个从未显示。因为方法doInBackground无法处理load web View的UI使用asyntask的loadwebview解决方案是什么?myTask.doInBackground(字符串…参数)返回值的值是多少?如果返回null或者您没有正确实现@Override函数,那么我相信onPostExecute(字符串结果)将不会被调用。?????为什么使用异步任务让webview在更新过程中加载url?我认为这毫无意义。绿色应用是对的。这不是为WebView
实现ProgressDialog
的方式。无论如何,您的问题是,显示的ProgressDialog
不是您要忽略的对话框。您正在使用的show(Context,CharSequence,CharSequence,boolean)
方法是ProgressDialog
的一个静态方法,它返回显示的实例,但您没有保留对该实例的引用,而是取消在异步任务顶部初始化的实例,但那个并没有显示。因为方法doInBackground不能处理加载web视图的UI,所以使用asyntask加载web视图的解决方案是什么?