在安卓中发送HTTP请求毫无疑问需要使用异步请求,也就是说还需要再开一个线程,JAVA中封装了两种多线程的方法:

方法一: 集成Thread类

方法二: 实现Runnable接口

在android 中通常使用android封装好的类AsyncTask
下面是封装好了的代码:

HttpTask.java:

import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import android.os.AsyncTask;//使用时只需要重写success()和faild()这两个函数即可public abstract class HttpTask extends AsyncTask<String, String, Boolean> implements SuccessFaild{    private String response;    @Override    protected Boolean doInBackground(String... params) {        // TODO Auto-generated method stub        //第一步:创建HttpClient对象        HttpClient httpCient = new DefaultHttpClient();        //第二步:创建代表请求的对象,参数是访问的服务器地址        HttpGet httpGet = new HttpGet(params[0]);        try {            //第三步:执行请求,获取服务器发还的相应对象            HttpResponse httpResponse = httpCient.execute(httpGet);            //第四步:检查相应的状态是否正常:检查状态码的值是200表示正常            if (httpResponse.getStatusLine().getStatusCode() == 200) {                //第五步:从相应对象当中取出数据,放到entity当中                HttpEntity entity = httpResponse.getEntity();                response = EntityUtils.toString(entity,"utf-8");//将entity当中的数据转换为字符串                return true;            }        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();            return false;        }        return false;    }    @Override    protected void onPostExecute(final Boolean success) {        if(success){ //请求成功,response是收到的json串            success();        }        else{//请求失败            faild();        }    }    @Override    protected void onCancelled() {        //task = null;    }    public String getResponse() {        return response;    }    public void setResponse(String response) {        this.response = response;    }}interface SuccessFaild{    void success();    void faild();}

以上代码不要修改(开闭原则)
下面是使用HttpTask类发送Http请求的示例代码:

@Override            public void onClick(View arg0) {                new HttpTask(){                    //发送Http请求成功,执行success函数,失败则执行faild函数                    @Override                    public void success() {                        //super.getResponse()用于获取收到的响应内容                        System.out.println(super.getResponse());                        // TODO Auto-generated method stub                    }                    @Override                    public void faild() {                        // TODO Auto-generated method stub                    }                }.execute("http://www.baidu.com");  //请求地址                // TODO Auto-generated method stub            }

2接口与抽象类

2.1被abstract修饰的类有两种情况

1.类ClassA中包含abstract修饰的方法FunB
2.类ClassA实现了接口InterfaceC,但是却没有全部实现C中定义的方法,此时ClassA也必须用abstract修饰

2.2关于神奇的@Override…今天终于弄明白了

有些类我们需要重写一些方法后才能使用比如下面这样:
我们一点这个蓝色的Add unimplemented methods编辑器就自动给我们添加上”unimplemented methods”(没有实现的方法),而且还会加上@Override标记(当然Override可以不加,只是会起到一个提示作用)

2.3抽象类中的非抽象方法中可以调用抽象方法(abstract)或者接口中未实现的方法。

比如在HttpTask.java中,我们在onPostExecute方法里调用了success()方法和faild方法,但是success在HttpTask类中没有实现。
在success方法实现之前,onPostExecute方法也没有意义,但是在success方法实现后,onPostExecute调用的是实现了的success方法,这时onPostExecute才有意义

更多相关文章

  1. [android] Bundle savedInstanceState的作用
  2. BAT大咖助力 全面升级Android面试-3android基础相关面试题
  3. LiveData+ViewModel+Lifecycle
  4. Nexus S不能发短信的解决方法
  5. Kotlin-->范围选择进度条, 双向SeekBar
  6. Android(安卓)Thread子线程和主线程的UI交互
  7. Android6.0来电流程
  8. android判断快捷方式是否已经创建的方法
  9. android 中ActivityUI装态保存

随机推荐

  1. android网络状态检查
  2. android中opengl es基本方法使用说明
  3. Android vlc 简单使用
  4. Dialog弹出后 Activity蒙层效果代码
  5. Android(安卓)仿58同城进度条加载内容动
  6. android 按两次返回键退出
  7. Cocos2d-x & NDK
  8. windows下搭建cocos2dx Android开发环境
  9. android中操作SQLite常见错误
  10. Android - ScrollView 使用小计 里面嵌套