当前位置:  开发笔记 > 编程语言 > 正文

Android:从回调获得结果(网络KOUSH ION)

如何解决《Android:从回调获得结果(网络KOUSHION)》经验,为你挑选了1个好方法。

对于我的应用程序,我需要从我们的服务器联系我们的API,它返回一些JSON.

下载JSON时,它应显示进度条.

我想我应该AsyncTask在进行网络操作时使用Android 来处理GUI,所以我在我的内容中写了以下内容Activity:

 class DownloadManager extends AsyncTask {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mLoadingSpinner.setVisibility(View.VISIBLE);
    }

    @Override
    protected Boolean doInBackground(String... params) {
        String id = params[0];
        downloadUtility.getId(id);

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);

        mLoadingSpinner.setVisibility(View.INVISIBLE);

    }

}

基本上,onPreExecute显示加载微调器,doInBackGround下载一些JSON,并onPostExecute停止微调器.

问题是,在downloadUtility.getId(id)我需要的范围内:

    如果下载成功,请打开新意图.

    如果下载失败,请保持相同的活动并显示错误吐司.

代码为getId:

public Future getId(final String id) {
    // set url
    String url = IPAddress.PRODUCTION + Variables.get_id+ id;
    downloading = Ion.with(context)
            .load("GET", url)
            .asJsonObject()
            .withResponse()
            .setCallback(new FutureCallback>() {
                @Override
                public void onCompleted(Exception e, Response response) {
                    //try catch here for null getHeaders
                    if (response != null) {
                        if (response.getHeaders().code() == 200) {

                            //SUCCESS !! Open new intent!


                        } else {
                            //FAIL!! Show TOAST!
                        }
                    }

                }
            });


    return downloading;

}

如你所见,我正在返回一个未来的对象.我如何从未来的对象中知道onCompleted(void)是成功还是失败,所以我可以在asynctask中处理结果(成功:打开新意图,失败:toast)?



1> Ravi Jaggara..:

在这里你运行一个asynctask在另一个asyctask中这不是一个正确的方法,你可以直接在你的活动中调用你的getId方法,它将不需要另一个asynctask因为下面的代码它自己asynctask.

 downloading = Ion.with(context)
        .load("GET", url)
        .asJsonObject()
        .withResponse()
        .setCallback(new FutureCallback>() {
            @Override
            public void onCompleted(Exception e, Response response) {
                //try catch here for null getHeaders
                if (response != null) {
                    if (response.getHeaders().code() == 200) {

                        //SUCCESS !! Open new intent!


                    } else {
                        //FAIL!! Show TOAST!
                    }
                }

            }
        });

//添加新答案

如果要从活动中分离整个下载代码,则可以在下载Utility类中创建自定义callBack.它将像活动和下载类之间的沟通者.我只是想在波纹管上完成这项任务.

DownloadUtility类接缝看起来像波纹管

public class DownloadUtility {


//DO Your all other Stuff

/**
 * Custom Callback
 */
public interface customCallBack {
    void onCompleted(Exception e, Response response);
}


/**
 * Your getID code 
 * 
 * @param context
 * @param id
 * @param mLoadingSpinner
 * @param callBack
 */
public static void getId(Activity context,final String id, Spinner mLoadingSpinner, final customCallBack callBack) {
    // set url
    mLoadingSpinner.setVisibility(View.VISIBLE);
    String url = IPAddress.PRODUCTION + Variables.get_id + id;
    downloading = Ion.with(context)
            .load("GET", url)
            .asJsonObject()
            .withResponse()
            .setCallback(new FutureCallback>() {
                @Override
                public void onCompleted(Exception e, Response response) {
                    mLoadingSpinner.setVisibility(View.GONE);
                   if(callBack != null)
                    callBack.onCompleted(e,response);
                    }
                }
            });
}

}

打电话给你的活动

DownloadUtility.getId(this, "ID", spinnerObj, new DownloadUtility.customCallBack() {
@Override
public void onCompleted(Exception e, Response response) {
    if (response != null) {
        if (response.getHeaders().code() == 200) {
            //SUCCESS !! Open new intent!
        } else {
            //FAIL!! Show TOAST!
        }
}

});

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有