android-doInBackground返回值始终为false

android-doInBackground返回值始终为false,android,android-asynctask,Android,Android Asynctask,当列表在AsyncTask中加载数据时,我试图显示ProgressDialog,但onPostExecute中的“exito”永远不会为true,并且该对话框永远不会关闭。 我试图删除if(exito),但progressDialog关闭,几秒钟后列表被收费,这不是我想要的。 我希望progressDialog在加载时显示,在加载时,关闭progressDialog并更改片段 我的错在哪里?谢谢 private class ATCargarProductos extends AsyncTask

当列表在AsyncTask中加载数据时,我试图显示ProgressDialog,但onPostExecute中的“exito”永远不会为true,并且该对话框永远不会关闭。 我试图删除
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关闭,几秒钟后列表被充电,这不是我想要的。那是一样的谢谢你