HttpURLConnectionh和HttpClient访问网络资源
来源:互联网 发布:双色球万能矩阵必中6码 编辑:程序博客网 时间:2024/05/16 14:09
一、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);
/**
* 条目的点击事件
*/
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 java.util.List;
/**
* @author Dash
* @date 2017/10/8
* @description:
*/
public class DataDataBean {
/**
* code : 200
* msg : success
* newslist : [{"ctime":"2017-10-08","title":"作为皇帝的大舅子,清朝的大将军,虎将,为何连跌14级成看门","description":"吉祥满族","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51956944.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428022&signature=OmTqiFObUQ-VsIYT77SqXIZukZFhIAWNjVua4NwSNgZWOrEUjt9DIVB05CyDC8USXF14QrhcNALZ*CwE4-Dy4Bm8rSV31reOXyO2EVIAoJU="},{"ctime":"2017-10-08","title":"不想认命,就去拼命!","description":"爱上英伦风","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51965372.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428022&signature=hkS4P-6VCxT4aXbAGaRa8Xs1vopcWZ*gZdAGUXilTqrknRxfRo-ehbtPZ1MaojaCrOn5xzo*qpK*qt8-y4YKR1kPUDlkzLHG4KfTMrwmH4c="},{"ctime":"2017-10-08","title":"高晓松:我教育女儿,心安理得混日子","description":"知儿网","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-47404735.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428022&signature=HaXxs0bkH86vMoqPlJUbt1PnpS6Jp8iSWzhGUvabHC3W4SRBCZpx2AM7BbDMStcH6wKXQ9y3RnUTGlwO1UAoOgFDcEKzZQAwDQP7zzef4Vc="},{"ctime":"2017-10-08","title":"我喜欢年老,它给了我自由!(激励千万人)","description":"中国老干部","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51963554.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428022&signature=iozuLZHfATnDSZFU1LtfMTKMyMwaJkKt9uAL70NCuVhqHQzGjlg0wXn5qYsST97WOnKZChUG5YReqLfnOf50iBdsQR3jRSwfLYwmugfw5uQ="},{"ctime":"2017-10-08","title":"很多时候,成长与舒适,不可共存!","description":"智联招聘HR公会","picUrl":"https://t1.qpic.cn/mblogpic/f01a972dbcc1060fd456/2000","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428021&signature=5qiVxYKRyae8WuOMKJYG4o0o3EVv1Sqkseeitq2*lXQq4mfnR0MvNrxgO5JzMkICREpK46UMSV0AqanuH-Rofx8k9tXgNzQ8xTG5EllbpJU="},{"ctime":"2017-10-08","title":"人生不在于获得,而在于放下!","description":"每日一禅","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51962244.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428021&signature=TAyl66MtGI6xW*OQOVCDynWDW5jVe33-R2mlmGcaGcA3XIwndC7m-VtmJK6dP8IluO4RS7UtGh9jsIS9DCwo57LUUtYw5hXw5-2gwVgQSYI="},{"ctime":"2017-10-08","title":"别忘了,你是活给自己看的!","description":"品茶时刻","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-50520645.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428021&signature=iobDkv7nQqX-5CmzvIAQ3hEoy*ze0VKDl7Uc8Pus8Ra*mP6W14u*KnD8gNze4PRReB0LAcCMwn9EbIEDgvuDb1U8Mkvb-PxRsKc4ugom7Ic="},{"ctime":"2017-10-08","title":"这样发朋友圈的女生,真的很掉价!","description":"壹课","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-13578048.static/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428020&signature=-csO*RirbaJc*xhezR6PUCI2FJ8ojRLcjqV4*E7r39RURf0fIViYHk9HBDcOElJ8ee8BR-fti-ryuXPpV-irBjwec0KaN112qe1ZYSOLtfM="},{"ctime":"2017-10-08","title":"\u201c子孙非我有\u201d,这句古话你赞不赞同?","description":"夜光杯","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51964888.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428020&signature=UxV9xVPillUyTfagg4o*ZA4S3EjHjrDxnqw7t2gZmj6iXS5aaqCxoWSU-kbuoslosL7ZC0n44s1*Ffcsbbcqg*MVs48GJXv4IxSEHlrRi5c="},{"ctime":"2017-10-08","title":"读经明义丨荀子:为人如土 隐微而显明","description":"腾讯儒学","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-51964820.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428020&signature=lUwGIALO8bnBR7UAunAzYtgtlqP7eJnc8UwbjtW1pCQnSY68mW8DvE0r7AoRxjxqO*w20ZLvkjV8Cp9-s9h083KuI1aOlT-*VW3i1iLOzPo="}]
*/
private int code;
private String msg;
private List<NewslistBean> newslist;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<NewslistBean> getNewslist() {
return newslist;
}
public void setNewslist(List<NewslistBean> newslist) {
this.newslist = newslist;
}
public static class NewslistBean {
/**
* ctime : 2017-10-08
* title : 作为皇帝的大舅子,清朝的大将军,虎将,为何连跌14级成看门
* description : 吉祥满族
* picUrl : https://zxpic.gtimg.com/infonew/0/wechat_pics_-51956944.jpg/640
* url : https://mp.weixin.qq.com/s?src=16&ver=413×tamp=1507428022&signature=OmTqiFObUQ-VsIYT77SqXIZukZFhIAWNjVua4NwSNgZWOrEUjt9DIVB05CyDC8USXF14QrhcNALZ*CwE4-Dy4Bm8rSV31reOXyO2EVIAoJU=
*/
private String ctime;
private String title;
private String description;
private String picUrl;
private String url;
public String getCtime() {
return ctime;
}
public void setCtime(String ctime) {
this.ctime = ctime;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
三、适配器
package news1510a.bawei.com.a04_zhou_test;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
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(final 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());
//显示图片....
/**
* 为什么图片会产生错位 闪烁?????图片是异步加载+复用的优化的原因
*
* 1.imageView要跟自己的url路径匹配起来
*/
holder.imageView.setTag(list.get(i).getPicUrl());
//3.设置默认显示的图片
holder.imageView.setImageResource(R.mipmap.ic_launcher);
//2.在这个位置能区分出来imageView是当前的控件...借助接口回调的形式把异步获取的图片传递过来
new ImageHelper().dispalyImage(list.get(i).getPicUrl(),holder.imageView, new ImageCallBack() {
@Override
public void setSuccessImage(Bitmap bitmap, ImageView imageView) {
if (imageView.getTag().equals(list.get(i).getPicUrl())){
//
imageView.setImageBitmap(bitmap);
}
}
});
return view;
}
private class ViewHolder{
ImageView imageView;
TextView text_title;
TextView text_time;
}
}
四、接口
package news1510a.bawei.com.a04_zhou_test;
import android.graphics.Bitmap;
import android.widget.ImageView;
/**
* @author Dash
* @date 2017/10/8
* @description:
*/
public interface ImageCallBack {
public void setSuccessImage(Bitmap bitmap, ImageView imageView);
}
五、加载列表图片
package news1510a.bawei.com.a04_zhou_test;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @author Dash
* @date 2017/10/8
* @description:
*/
public class ImageHelper {
public void dispalyImage(final String picUrl, final ImageView imageView, final ImageCallBack imageCallBack) {
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) {
/*if (imageView.getTag().equals(picUrl)){
//设置
imageView.setImageBitmap(bitmap);
}*/
imageCallBack.setSuccessImage(bitmap,imageView);
}
};
asyncTask.execute();
}
}
六、点击条目跳转到第二个 Activity
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();//这个是js与android原生app进行交互的时候可以使用
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
//设置支持js自动弹窗
settings.setJavaScriptCanOpenWindowsAutomatically(true);
}
}
- HttpURLConnectionh和HttpClient访问网络资源
- 简单使用URLConnection、HttpURLConnection和HttpClient访问网络资源
- 简单使用URLConnection、HttpURLConnection和HttpClient访问网络资源
- 简单使用URLConnection、HttpURLConnection和HttpClient访问网络资源
- 使用Apache的HttpClient访问网络资源-----安卓网络请求(1)
- Android 通过 HttpClient 获取网络资源
- Jsoup 与 httpClient 获取网络资源
- JAVA中URL的实现,寻址和访问网络资源
- 使用afinal 中的finalhttp和finalbitmap访问网络资源+finalActivity
- 无权限访问网络资源
- 使用URL访问网络资源
- 使用URL访问网络资源
- 访问Internet网络资源
- 使用URL访问网络资源
- 使用URL访问网络资源
- 线程URL访问网络资源
- Android 中的两种请求网络资源的方式:HttpClient和HttpURLConnection
- HttpClient的Post和Get访问网页
- __bridge
- Android 系统解析AndroidManifest
- [NOIP模拟] Ball
- IntelliJ-IDEA 快捷键(一)
- 软件工程餐馆点菜之需求分析
- HttpURLConnectionh和HttpClient访问网络资源
- Spring.Net在MVC4中的使用
- 静态链表的基本操作及其应用(实验2.3)
- Spring Boot Starter的面试题
- 大学生职业生涯规划书范文
- Microsoft SQL Server学习(八)--T-SQL
- 二叉树遍历及其相关问题
- Action recognition进展介绍
- win10系统Markdown无法预览问题