实现android异步调用WEB API的方法,并实现回调

来源:互联网 发布:人民搜索网络股份公司 编辑:程序博客网 时间:2024/05/22 04:57

上一篇文章 实现android异步调用WEB API的方法 在做完了事之后没有告诉主线程,我在这里改进一下让他在完事后可以告诉主线程,这样就比较实用了


首先定义一个接口并简单实现一下,onTaskCompleted 就是我们将来完成异步后腰回调的方法:

public interface OnTaskCompleted{    void onTaskCompleted(JSONObject result);}public class Callback implements OnTaskCompleted{    @Override    public void onTaskCompleted(JSONObject result) {        // do something with result here!    }}


然后修改我的异步调用的代码

public class ApiCall extends AsyncTask {    private OnTaskCompleted listener;    private String result;    public ApiCall(OnTaskCompleted listener){        this.listener=listener;    }    protected Long doInBackground(URL... urls) {        int count = urls.length;        long totalSize = 0;        StringBuilder resultBuilder = new StringBuilder();        for (int i = 0; i < count; i++) {            try {                // Read all the text returned by the server                InputStreamReader reader = new InputStreamReader(urls[i].openStream());                BufferedReader in = new BufferedReader(reader);                String resultPiece;                while ((resultPiece = in.readLine()) != null) {                    resultBuilder.append(resultPiece);                }                in.close();             } catch (MalformedURLException e) {                 e.printStackTrace();             } catch (IOException e) {                 e.printStackTrace();             }             // if cancel() is called, leave the loop early             if (isCancelled()) {                 break;             }         }         // save the result         this.result = resultBuilder.toString();         return totalSize;     }    protected void onProgressUpdate(Integer... progress) {        // update progress here    }    // called after doInBackground finishes    protected void onPostExecute(Long result) {        Log.v("result, yay!", this.result);        // put result into a json object        try {            JSONObject jsonObject = new JSONObject(this.result);            // call callback            listener.onTaskCompleted(jsonObject);        } catch (JSONException e) {            e.printStackTrace();        }    }}

调用就很简单了

URL url = null;try {    url = new URL("http://127.0.0.0/search");} catch (MalformedURLException e) {    e.printStackTrace();}new ApiCall(new Callback()).execute(url);




原创粉丝点击