httpClient

来源:互联网 发布:java链表类 编辑:程序博客网 时间:2024/05/17 00:59

SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(sslContext,SSLConnectionSocktFactory.ALLOW_ALL_HOSTNAME_VERIFIER);证书不匹配

使用httpClient获取数据...点击事件    useLibrary 'org.apache.http.legacy'   useLibrary 'org.apache.http.legacy'



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);

 

                /**

                 * 条目的点击事件

                 */

                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                    @Override

                    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                        Intent intent = new Intent(MainActivity.this,DetailActivity.class);

 

                        intent.putExtra("url",newslist.get(i).getUrl());

 

                        startActivity(intent);

                    }

                });

 

            }

        };

 

        /**

         * 异步任务要执行,,,需要手动的去调用excute方法

         */

        asyncTask.execute();

 

    }

 

    /**

     * 使用httpUrlConnection获取...点击事件

     * @param view

     */

    public void getDataByConnection(View view){

 

        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {

            @Override

            protected String doInBackground(Void... voids) {

 

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

 

                try {

                    URL url = new URL(path);

 

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                    //设置

                    connection.setRequestMethod("GET");

                    connection.setReadTimeout(5000);

                    connection.setConnectTimeout(5000);

 

                    //获取

                    int responseCode = connection.getResponseCode();

                    if (responseCode == 200){

                        InputStream inputStream = connection.getInputStream();

 

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

 

                        //返回

                        return json;

                    }

 

                } catch (Exception e) {

                    e.printStackTrace();

                }

 

                return null;

            }

 

            @Override

            protected void onPostExecute(String s) {

                //在这里接收到doInBackground返回的json数据,,,解析设置适配器

                Gson gson = new Gson();

 

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

 

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

 

                //设置适配器

                MyAdapter myAdapter = new MyAdapter(newslist, MainActivity.this);

 

                listView.setAdapter(myAdapter);

            }

        };

 

 

        //执行

        asyncTask.execute();

 

    }

 

    /**

     * 把一个字节流转换为字符串的方法

     *

     * @param inputStream

     * @param charset

     * @return

     */

    private String streamToString(InputStream inputStream,String charset) {

        try {

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);

 

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String s = null;

            StringBuilder builder = new StringBuilder();

            while ((s = bufferedReader.readLine()) != null){

                builder.append(s);

            }

 

            bufferedReader.close();

            return builder.toString();

 

        } catch (Exception e) {

            e.printStackTrace();

        }

 

        return  null;

    }

}




package news1510a.bawei.com.a04_zhou_test;

 

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.webkit.WebSettings;

import android.webkit.WebView;

import android.webkit.WebViewClient;

 

public class DetailActivity extends AppCompatActivity {

 

    private WebView webView;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_detail);

 

        //先获取传递的路径

        String url = getIntent().getStringExtra("url");

 

        //展示到webView

        webView = (WebView) findViewById(R.id.web_view);

 

        webView.loadUrl(url);

 

        //设置

        //在当前的activity加载,,,而不是浏览器去加载

        webView.setWebViewClient(new WebViewClient());

 

        //webView.setWebChromeClient();//这个是jsandroid原生app进行交互的时候可以使用

 

        WebSettings settings = webView.getSettings();

        settings.setJavaScriptEnabled(true);

        //设置支持js自动弹窗

        settings.setJavaScriptCanOpenWindowsAutomatically(true);

    }

}




package news1510a.bawei.com.a04_zhou_test;

 

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

 

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.List;

 

/**

 * @author Dash

 * @date 2017/10/8

 * @description:

 */

public class MyAdapter extends BaseAdapter {

    List<DataDataBean.NewslistBean> list;

    Context context;

 

    public MyAdapter(List<DataDataBean.NewslistBean> list, Context context) {

        this.list = list;

        this.context = context;

    }

 

    @Override

    public int getCount() {

        return list.size();

    }

 

    @Override

    public Object getItem(int i) {

        return list.get(i);

    }

 

    @Override

    public long getItemId(int i) {

        return i;

    }

 

    @Override

    public View getView(int i, View view, ViewGroup viewGroup) {

        ViewHolder holder;

        if (view == null){

            view = View.inflate(context,R.layout.item_layou,null);

 

            holder = new ViewHolder();

 

            holder.imageView = view.findViewById(R.id.image_view);

            holder.text_time = view.findViewById(R.id.text_time);

            holder.text_title = view.findViewById(R.id.text_title);

 

            view.setTag(holder);

 

        }else {

            holder = (ViewHolder) view.getTag();

        }

 

        //赋值

        holder.text_title.setText(list.get(i).getTitle());

        holder.text_time.setText(list.get(i).getCtime());

 

        //显示图片....

        dispalyImage(list.get(i).getPicUrl(),holder.imageView);

 

        return view;

    }

 

    private void dispalyImage(final String picUrl, final ImageView imageView) {

        AsyncTask<Void, Void, Bitmap> asyncTask = new AsyncTask<Void, Void, Bitmap>() {

            @Override

            protected Bitmap doInBackground(Void... voids) {

 

                try {

                    URL url = new URL(picUrl);

 

                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

 

                    //设置

                    connection.setRequestMethod("GET");

                    connection.setReadTimeout(5000);

                    connection.setConnectTimeout(5000);

                    //获取

                    int responseCode = connection.getResponseCode();

                    if (responseCode == 200){

                        InputStream inputStream = connection.getInputStream();

 

                        //转成bitmap

                        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

 

                        return bitmap;

 

                    }

 

                } catch (Exception e) {

                    e.printStackTrace();

                }

 

                return null;

            }

 

            @Override

            protected void onPostExecute(Bitmap bitmap) {

 

                //设置

                imageView.setImageBitmap(bitmap);

            }

        };

 

        asyncTask.execute();

    }

 

    private class ViewHolder{

        ImageView imageView;

        TextView text_title;

        TextView text_time;

    }

}




原创粉丝点击