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();//这个是js与android原生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;
}
}
- HttpClient
- HttpClient
- httpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- HttpClient
- httpclient
- httpclient
- HttpClient
- HttpClient
- httpclient
- httpclient
- HttpClient
- [LeetCode]22. Generate Parentheses
- 大疆提前批Android端 终面后加面
- 获取网络json+图片
- 算法竞赛入门经典(第二版)第一章课后习题
- bootstrap预设置
- httpClient
- C++ 的整数类型及其输入输出
- 2018百度测试开发面经(已拿offer)
- 360内推Android面经
- 又开始了一段新的路程
- C语言打印英文字母三角
- ListView+AsyncTask展示
- 2018腾讯Android面经(已拿offer)
- 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)