Android ProgressDialog在Toast从AsyncTask的doInBackground方法出现之前被解除
我正在使用Android ProgressDialog在Toast从AsyncTask的doInBackground方法出现之前被解除,android,json,android-asynctask,progressdialog,Android,Json,Android Asynctask,Progressdialog,我正在使用AsyncTask发出一个jsonhttp请求。我在onPreExecute()中创建了一个ProgressDialog,并在onPostExecute()中取消了它。问题是,diInBackground()中有一条Toast消息,显示在出现Toast之前,JSON响应和ProgressDialog被解除,这意味着在生成Toast之前调用onPostExecute()。我怎样才能在土司出现之前取消它 这是我的密码 private class login extends AsyncTa
AsyncTask
发出一个jsonhttp
请求。我在onPreExecute()
中创建了一个ProgressDialog
,并在onPostExecute()
中取消了它。问题是,diInBackground()
中有一条Toast消息,显示在出现Toast
之前,JSON响应和ProgressDialog
被解除,这意味着在生成Toast
之前调用onPostExecute()
。我怎样才能在土司出现之前取消它
这是我的密码
private class login extends AsyncTask<Void,Void,Void>{
private ProgressDialog progressDialog;
@Override
protected void onPreExecute(){
super.onPreExecute();
// Create & Start Progress Dialog
progressDialog = new ProgressDialog(LoginActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
String url = "http://api.openweathermap.org/data/2.5/weather?q=London,uk";
JsonObjectRequest req = new JsonObjectRequest(url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Toast.makeText(getApplicationContext(),response.toString() , Toast.LENGTH_SHORT).show();
}
}
catch (Exception e){
Toast.makeText(getApplicationContext(),"Server error!..",Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("from on error response Server Error..: ", error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(req);
return null;
}
@Override
protected void onPostExecute(Void v){
// Terminate Progress Dialog
progressDialog.dismiss();
}
}
私有类登录扩展异步任务{
私有进程对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//“创建和启动进度”对话框
progressDialog=新建progressDialog(LoginActivity.this);
progressDialog.setMessage(“加载…”);
progressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
字符串url=”http://api.openweathermap.org/data/2.5/weather?q=London,英国”;
JsonObjectRequest req=新的JsonObjectRequest(url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();
}
}
捕获(例外e){
Toast.makeText(getApplicationContext(),“服务器错误!”,Toast.LENGTH\u SHORT.show();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
e(“来自错误响应服务器错误..:”,error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(req);
返回null;
}
@凌驾
受保护的void onPostExecute(void v){
//终止进度对话框
progressDialog.disclose();
}
}
这个代码完全错误您不能从doInBackground添加吐司。。你需要在解雇迪奥洛格之后移动这个
// Terminate Progress Dialog
progressDialog.dismiss();
//Add your Toast here
您可以在toast显示后使用TimerTask手动关闭对话框。您可以看到如何使用TimerTask。您正在使用Toast.LENGTH\u SHORT,因此Toast将显示2秒钟。无需在异步任务中写入截击请求。您可以直接执行该任务,因为它在内部使用线程。因此,一旦您得到响应或失败,您就可以关闭对话框。我想这对你有帮助
String url = "http://api.openweathermap.org/data/2.5/weather?q=London,uk";
JsonObjectRequest req = new JsonObjectRequest(url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if(progressDialog.isShowing){
progressDialog.cancel();
}
try {
Toast.makeText(getApplicationContext(),response.toString() , Toast.LENGTH_SHORT).show();
}
}
catch (Exception e){
Toast.makeText(getApplicationContext(),"Server error!..",Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("from on error response Server Error..: ", error.getMessage());
if(progressDialog.isShowing){
progressDialog.cancel();
}
}
});
AppController.getInstance().addToRequestQueue(req);
stringurl=”http://api.openweathermap.org/data/2.5/weather?q=London,英国”;
JsonObjectRequest req=新的JsonObjectRequest(url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
如果(progressDialog.isShowing){
progressDialog.cancel();
}
试一试{
Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();
}
}
捕获(例外e){
Toast.makeText(getApplicationContext(),“服务器错误!”,Toast.LENGTH\u SHORT.show();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
e(“来自错误响应服务器错误..:”,error.getMessage());
如果(progressDialog.isShowing){
progressDialog.cancel();
}
}
});
AppController.getInstance().addToRequestQueue(req);
我希望这将有助于您,无需AsyncTask。关闭响应和错误侦听器中的progressdialog…无需关闭on-post方法
private class login extends AsyncTask<Void,Void,Void>{
private ProgressDialog progressDialog;
@Override
protected void onPreExecute(){
super.onPreExecute();
// Create & Start Progress Dialog
progressDialog = new ProgressDialog(LoginActivity.this);
progressDialog.setMessage("Loading...");
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
String url = "http://api.openweathermap.org/data/2.5/weather?q=London,uk";
JsonObjectRequest req = new JsonObjectRequest(url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Toast.makeText(getApplicationContext(),response.toString() , Toast.LENGTH_SHORT).show();
}
}
catch (Exception e){
Toast.makeText(getApplicationContext(),"Server error!..",Toast.LENGTH_SHORT).show();
progressDialog.dismiss(); add this line
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("from on error response Server Error..: ", error.getMessage());
progressDialog.dismiss(); add this line
}
});
AppController.getInstance().addToRequestQueue(req);
return null;
}
@Override
protected void onPostExecute(Void v){
// Terminate Progress Dialog
//progressDialog.dismiss(); comment this line
}
}
私有类登录扩展异步任务{
私有进程对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//“创建和启动进度”对话框
progressDialog=新建progressDialog(LoginActivity.this);
progressDialog.setMessage(“加载…”);
progressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
字符串url=”http://api.openweathermap.org/data/2.5/weather?q=London,英国”;
JsonObjectRequest req=新的JsonObjectRequest(url,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_SHORT).show();
}
}
捕获(例外e){
Toast.makeText(getApplicationContext(),“服务器错误!”,Toast.LENGTH\u SHORT.show();
progressDialog.Disclose();添加此行
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
e(“来自错误响应服务器错误..:”,error.getMessage());
progressDialog.Disclose();添加此行
}
});
AppController.getInstance().addToRequestQueue(req);
返回null;
}
@凌驾
受保护的void onPostExecute(void v){
//终止进度对话框
//progressDialog.Disclose();注释此行
}
}
如果要打印toast消息,则可以使用
处理程序。
Handler h = new Handler(this.getMainLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),response.toString() , Toast.LENGTH_SHORT).show();
//stopProgress
}
});
你怎么能从背景中称之为吐司呢
Handler h = new Handler(this.getMainLooper());
h.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),response.toString() , Toast.LENGTH_SHORT).show();
//stopProgress
}
});