android-doInBackground返回值始终为false
当列表在AsyncTask中加载数据时,我试图显示ProgressDialog,但onPostExecute中的“exito”永远不会为true,并且该对话框永远不会关闭。 我试图删除android-doInBackground返回值始终为false,android,android-asynctask,Android,Android Asynctask,当列表在AsyncTask中加载数据时,我试图显示ProgressDialog,但onPostExecute中的“exito”永远不会为true,并且该对话框永远不会关闭。 我试图删除if(exito),但progressDialog关闭,几秒钟后列表被收费,这不是我想要的。 我希望progressDialog在加载时显示,在加载时,关闭progressDialog并更改片段 我的错在哪里?谢谢 private class ATCargarProductos extends AsyncTask
if(exito)
,但progressDialog关闭,几秒钟后列表被收费,这不是我想要的。
我希望progressDialog在加载时显示,在加载时,关闭progressDialog并更改片段
我的错在哪里?谢谢
private class ATCargarProductos extends AsyncTask<Void, Integer, Boolean>{
boolean terminado = false;
Bundle bdl;
FragmentTransaction transaction;
ProgressDialog progressDialog;
ArrayList<ItemDetails> results = new ArrayList<ItemDetails>();
public ATCargarProductos(FragmentTransaction transaction){
this.transaction = transaction;
}
@Override
protected Boolean doInBackground(Void... params) {
if (compruebaConexion()) {
rellenaLista(new CallBack() {
@Override
public void onSuccess(final ArrayList<Comida> listaComidas) {
for (int i = 0; i < listaComidas.size(); i++) {
ItemDetails item_details = new ItemDetails(listaComidas.get(i));
if (item_details.getTipo().equals("B")) {
results.add(item_details);
}
}
Fragment fragmentProductos = new FragmentProductos();
bdl = new Bundle(2);
bdl.putInt("tipoProducto", 1);
bdl.putParcelableArrayList("resultados", results);
fragmentProductos.setArguments(bdl);
completado = true;
}
@Override
public void onFail(String msg) {
}
});
return completado;
} else {
return false;
}
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(getActivity(), R.style.AppTheme_Dark_Dialog);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Cargando lista...");
progressDialog.show();
}
@Override
protected void onPostExecute(Boolean exito) {
super.onPostExecute(exito);
if (exito) {
progressDialog.dismiss();
transaction.commit();
}
}
}
私有类ATCargarProductos扩展异步任务{
布尔终端=假;
束bdl;
零碎交易;
进行对话进行对话;
ArrayList结果=新建ArrayList();
公共ATCargarProductos(零碎交易){
this.transaction=交易;
}
@凌驾
受保护的布尔doInBackground(Void…params){
if(compruebaConexion()){
rellenaLista(新回调(){
@凌驾
成功时公开作废(最终阵列列表列表){
对于(int i=0;i
如果您可以将此方法的代码添加到问题中,我认为方法compruebaConexion()
总是错误的。我可以承认这个想法。如果你能把这个方法的代码添加到问题中,我认为方法compruebaConexion()
总是错误的。我可以承认这个想法。rellenaLista()
是异步的
由于它运行在不同的线程上,返回completado代码>在到达onSuccess()之前执行,因此completado
仍然是false
您实际上不需要异步任务
您可以执行以下操作:
if (compruebaConexion()) {
// show progress dialog here
rellenaLista(new CallBack() {
@Override
public void onSuccess(final ArrayList<Comida> listaComidas) {
// dismiss dialog
// handle success
}
@Override
public void onFail(String msg) {
// dismiss dialog
// handle failure
}
});
}
if(compruebaConexion()){
//在此处显示进度对话框
rellenaLista(新回调(){
@凌驾
成功时公开作废(最终阵列列表列表){
//取消对话框
//成功
}
@凌驾
公共void onFail(字符串msg){
//取消对话框
//处理失败
}
});
}
rellenaLista()
是异步的
由于它运行在不同的线程上,返回completado代码>在到达onSuccess()之前执行,因此completado
仍然是false
您实际上不需要异步任务
您可以执行以下操作:
if (compruebaConexion()) {
// show progress dialog here
rellenaLista(new CallBack() {
@Override
public void onSuccess(final ArrayList<Comida> listaComidas) {
// dismiss dialog
// handle success
}
@Override
public void onFail(String msg) {
// dismiss dialog
// handle failure
}
});
}
if(compruebaConexion()){
//在此处显示进度对话框
rellenaLista(新回调(){
@凌驾
成功时公开作废(最终阵列列表列表){
//取消对话框
//成功
}
@凌驾
公共void onFail(字符串msg){
//取消对话框
//处理失败
}
});
}
创建这样的类。并用它检查您的互联网连接
public class EZInternetConnection {
public static boolean isNetworkConnected(Context context)
{
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean flag = cm.getActiveNetworkInfo() != null &&
cm.getActiveNetworkInfo().isConnectedOrConnecting();
return flag;
}
}
用法:
创建这样一个类。并用它检查您的互联网连接
public class EZInternetConnection {
public static boolean isNetworkConnected(Context context)
{
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean flag = cm.getActiveNetworkInfo() != null &&
cm.getActiveNetworkInfo().isConnectedOrConnecting();
return flag;
}
}
用法:
compruebaConexion
是否为真?是否引发异常,阻止将completado
设置为true?(试试看是否成功。)是的,这是真的。此方法仅检查您是否可以访问Internet。compruebaConexion
是否为真?是否引发异常,阻止将completado
设置为true?(试试看是否成功。)是的,这是真的。此方法仅检查您是否可以访问Internet。它不是错误的,因为我在调试中检查它。此方法仅检查您是否可以访问Internet,如果您有Wifi或3G,此方法始终返回trueChange返回completado
to返回true代码>要测试。>我试图删除if(exito),但是progressDialog关闭,几秒钟后列表被充电,这不是我想要的。这与它不是false是一样的,因为我在debug中检查它。此方法仅检查您是否可以访问Internet,如果您有Wifi或3G,此方法始终返回trueChange返回completado
to返回true代码>要测试。>我试图删除if(exito),但是progressDialog关闭,几秒钟后列表被充电,这不是我想要的。那是一样的谢谢你