博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定义内部类 继承 AsyncTask 来实现异步网络请求
阅读量:6293 次
发布时间:2019-06-22

本文共 3431 字,大约阅读时间需要 11 分钟。

hot3.png

//异步任务处理    //创建内部类,来实现网络异步请求    //新建内部类 继承 AsyncTask    @SuppressLint("StaticFieldLeak")    class RequestNetworkDataTask extends AsyncTask
{ @Override protected void onPreExecute() { super.onPreExecute(); textView.setText("加载中"); //主线程 } @Override protected String doInBackground(String[] strings) { String result = requestData(strings[0]); return result; //子线程,需要异步执行的命令在此执行 } @Override protected void onPostExecute(String s) { super.onPostExecute(s); textView.setText(s); //主线程 //异步代码处理完后,在主线程中进行进一步操作 } }

在需要调用这个自定义内部类的地方使用以下代码

String url = getEditTextUrl();                new RequestNetworkDataTask().execute(url);

下面是通过EditText 获取输入的网址

通过点击Button 在下方的TextView中显示网址对应的网站源码

public class NetworkActivity extends AppCompatActivity implements View.OnClickListener {    private EditText editText;    private Button btn;    private TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_network);        initView();        btn.setOnClickListener(this);    }    private void initView() {        editText = findViewById(R.id.act_network_url_et);        btn = findViewById(R.id.act_network_getNet_btn);        textView = findViewById(R.id.act_network_show_tv);    }    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.act_network_getNet_btn:                String url = getEditTextUrl();                new RequestNetworkDataTask().execute(url);                break;        }    }    private String getEditTextUrl() {        return editText != null ? editText.getText().toString() : "";    }    private String requestData(String urlString) {        try {            URL url = new URL(urlString);            //打开Url            HttpURLConnection connection = (HttpURLConnection) url.openConnection();            //设置超时时间            connection.setConnectTimeout(5000);            //设置请求方法            connection.setRequestMethod("GET");            //开始请求            connection.connect();            int response = connection.getResponseCode();            //请求的消息            String reponseMessage = connection.getResponseMessage();            InputStream inputStream = connection.getInputStream();            Reader reader = new InputStreamReader(inputStream, "UTF-8");            char[] buffer = new char[1024 * 8];            reader.read(buffer);            String content = new String(buffer);            return content;        } catch (IOException e) {            e.printStackTrace();        }        return null;    }    //异步任务处理    //创建内部类,来实现网络异步请求    @SuppressLint("StaticFieldLeak")    class RequestNetworkDataTask extends AsyncTask
{ @Override protected void onPreExecute() { super.onPreExecute(); textView.setText("加载中"); //主线程 } @Override protected String doInBackground(String[] strings) { String result = requestData(strings[0]); return result; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); textView.setText(s); //主线程 } }}

 

转载于:https://my.oschina.net/lanyu96/blog/2983802

你可能感兴趣的文章
hive执行流程(3)-Driver类分析1Driver类整体流程
查看>>
Android开发学习笔记:对话框浅析
查看>>
Ajax学习-Ajax简介
查看>>
下载备忘:甘特图实现的代码
查看>>
Linux文本比较命令:diff
查看>>
redux-form的学习笔记二--实现表单的同步验证
查看>>
小评 XenServer 6.0功能
查看>>
Android中获取屏幕的宽和高
查看>>
ACL访问控制列表
查看>>
Lync Server 2010迁移至Lync Server 2013故障排错Part1:缺少McsStandalone.msi
查看>>
域控制器建立教程
查看>>
RHCE 学习笔记(20) ACL
查看>>
Django 和 Ajax 简介
查看>>
Qt的一个颜色选取按钮QColorButton
查看>>
perl 散列数组
查看>>
puppet之service管理
查看>>
Exchange2010server证书申请及分配服务
查看>>
Cassandra 处理客户端请求
查看>>
[WinApi]邮槽通信C/S实例
查看>>
linux NFS配置:NFS相关概念及其配置与查看
查看>>