HttpURLConnectionh和HttpClient访问网络资源

一、MainActivity 主线程

package news1510a.bawei.com.a04_zhou_test;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import com.google.gson.Gson;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

/**
 * 去掉标题在这里写requestWindownFeatrue不管用
 *
 * 使用theme主题去去除标题
 */
public class MainActivity extends AppCompatActivity {

    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.list_view);



    }

    /**
     * 使用httpClient获取数据...点击事件
     *
     * 一般情况下httpClient是没有问题的,,,但是对于一些路径可能会出现问题
     *
     * javax.net.ssl.SSLException: hostname in certificate didn't match: <api.tianapi.com> != <*.sinaapp.com> OR <*.sinaapp.com> OR <sinaapp.com>
     *
     * 解决办法:http://blog.csdn.net/ITermeng/article/details/52937158?locationNum=1&fps=1
     * @param view
     */
    public void getDataByClient(View view){
        //第一个是参数的意思,,,一般是url地址,,Void,,,第二个是异步任务执行的进度,,Void,,第三个是结果泛型,,,String
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {

            //运行在后台...类似子线程,,,做耗时的操作(访问网络的操作)
            @Override
            protected String doInBackground(Void... voids) {
                try {
                    /**
                     * httpClient已经过时了,在使用的时候需要在build,grandle下面加一行代码,去支持httpClient
                     */

                    SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier());

                    String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10";

                    //1.创建一个客户端对象
                    HttpClient client = new DefaultHttpClient();
                    //2.创建一个请求的对象...请求的对象可以是get也可以是post
                    HttpGet httpGet = new HttpGet(path);

                    //3.客户端对象执行get请求....返回值是一个响应的对象
                    HttpResponse httpResponse = client.execute(httpGet);

                    //获取状态码
                    int statusCode = httpResponse.getStatusLine().getStatusCode();
                    if (statusCode == 200) {
                        //获取响应的实体内容...字节流...先获取实体内容的对象...在获取内容
                        InputStream inputStream = httpResponse.getEntity().getContent();

                        String json = streamToString(inputStream, "utf-8");

                        //返回
                        return json;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }


                return null;
            }

            //接收到doInBackground发送回来的数据....处于主线程,,,更新界面的操作写在这里
            @Override
            protected void onPostExecute(String s) {//s就是doInBackground返回的json数据

                //在这里接收到doInBackground返回的json数据,,,解析设置适配器
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);

                final List<DataDataBean.NewslistBean> newslist = dataDataBean.getNewslist();

                //设置适配器
                MyAdapter myAdapter = new MyAdapter(newslist, MainActivity.this);

                listView.setAdapter(myAdapter);

                /**
                 * 条目的点击事件
                 */
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值