• Android使用AsyncTask异步线程网络通信获取数据(get json)


    摘要:

      android 4.0以上强制要求不能在主线程执行耗时的网络操作,网络操作需要使用Thead+Handler或AsyncTask,本文将介绍AsyncTask的使用方法。

    内容:

    1.添加HttpTask.java

    public class HttpTask extends AsyncTask<String, Integer, String> {
        private static final String TAG = "HTTP_TASK";
    
        @Override
        protected String doInBackground(String... params) {
            // Performed on Background Thread
            String url = params[0];
            try {
                String json = new NetworkTool().getContentFromUrl(url);
                return json;
            } catch (Exception e) {
                // TODO handle different exception cases
                Log.e(TAG, e.toString());
                e.printStackTrace();
                return null;
            }
        }
    
        @Override
        protected void onPostExecute(String json) {
            // Done on UI Thread
            if (json != null && json != "") {
                Log.d(TAG, "taskSuccessful");
                int i1 = json.indexOf("["), i2 = json.indexOf("{"), i = i1 > -1
                        && i1 < i2 ? i1 : i2;
                if (i > -1) {
                    json = json.substring(i);
                    taskHandler.taskSuccessful(json);
                } else {
                    Log.d(TAG, "taskFailed");
                    taskHandler.taskFailed();
                }
            } else {
                Log.d(TAG, "taskFailed");
                taskHandler.taskFailed();
            }
        }
    
        public static interface HttpTaskHandler {
            void taskSuccessful(String json);
    
            void taskFailed();
        }
    
        HttpTaskHandler taskHandler;
    
        public void setTaskHandler(HttpTaskHandler taskHandler) {
            this.taskHandler = taskHandler;
        }
    
    }

    2.调用使用:

    HttpTask task = new HttpTask();
    task.setTaskHandler(new HttpTaskHandler(){
        public void taskSuccessful(String json) {
           try {
                JSONObject jsonObj = new JSONObject(json);
                String demo = jsonObj.getString("demo");
        } catch (Exception e) {
                e.printStackTrace();
           }
        }
    
        public void taskFailed() {
        }
    });
    task.execute("http://www.yourdomain.com/api/getjson");

    原文:

    王懿璞.Android:网络操作2.3等低版本正常,4.0(ICS)以上出错,换用AsyncTask异步线程get json[2014-07-14](2013-03-19).http://www.cnblogs.com/yipu/archive/2013/03/19/2969941.html

  • 相关阅读:
    Decimal 格式化输出( 去掉多余的0和点)
    HTML Character Sets
    生成下面的模块时,启用了优化或没有调试信息
    PJBLog的CSS模板图
    .NET 实例化顺序
    Live Mail 报错 0x80048820 可能的处理方式
    Windows下将Ldif文件导入OpenLdap时的中文转换问题
    DataGrid中动态添加列
    Sip协议栈消息层的设计与实现
    Prism学习笔记模块之间通信的几种方式
  • 原文地址:https://www.cnblogs.com/ccdc/p/3843399.html
Copyright © 2020-2023  润新知