网易新闻API接口的实现(Picasso类库的使用与HTTP协议的get请求,BitMap样例(未使用))
2017-03-16 12:54
417 查看
实体类
自定义adapter
MainAcvitity
新闻详情页Main2Acvitity
自定义adapter
MainAcvitity
新闻详情页Main2Acvitity
实体类:
public class NewsList implements Serializable{ private String ctime,title,description,picUrl,url; public NewsList() { } public NewsList(String ctime, String title, String description, String picUrl, String url) { this.ctime = ctime; this.title = title; this.description = description; this.picUrl = picUrl; this.url = 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; } }
自定义adapter:
public class MyAdapter extends BaseAdapter { private Context context; private List<NewsList> list; private LayoutInflater inflater; public MyAdapter(Context context, List<NewsList> list) { this.context = context; this.list = list; inflater=LayoutInflater.from(context); } public void setList(List<NewsList> list) { this.list = list; } @Overri dac6 de public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder=null; if (convertView==null){ holder=new ViewHolder(); convertView=inflater.inflate(R.layout.newslist_item,null);//自定义布局样式在此处加载 holder.iv_pic= (ImageView) convertView.findViewById(R.id.iv_pic); holder.tv_desc= (TextView) convertView.findViewById(R.id.tv_desc); holder.tv_title= (TextView) convertView.findViewById(R.id.tv_title); holder.tv_ctime= (TextView) convertView.findViewById(R.id.tv_ctime); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } NewsList news= (NewsList) getItem(position);//此处不能new,不然报空指针 holder.tv_title.setText(news.getTitle().toString()); holder.tv_desc.setText(news.getDescription().toString()); holder.tv_ctime.setText(news.getCtime().toString()); Picasso.with(context).load(news.getPicUrl()).into(holder.iv_pic); // Bitmap bitmap=getHttpBitmap(news.getPicUrl()); // holder.iv_pic.setImageBitmap(bitmap); return convertView; } class ViewHolder { private ImageView iv_pic; private TextView tv_title,tv_desc,tv_ctime; } /** * 根据图片url获取网络图片的Bitmap */ public static Bitmap getHttpBitmap(String url){ URL url1; Bitmap bitmap=null; try { url1=new URL(url); HttpURLConnection conn= (HttpURLConnection) url1.openConnection(); // conn.setConnectTimeout(5000);//限定时间5s,0表示没有时间限制 conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false);//不设置用户缓存 //获取流资源 InputStream is=conn.getInputStream(); //解析流得到图片 bitmap=BitmapFactory.decodeStream(is); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }
MainAcvitity
public class MainActivity extends AppCompatActivity { private PullToRefreshListView lv; private String url="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="; private MyThread thread=null; private String result=null; private MyHandle handle=null; private List<NewsList> list1; public static final int PAGE=1; public static final int LOADING=2; public int page =1; private MyAdapter adapter=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv= (PullToRefreshListView) findViewById(R.id.lv); lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { page=1; getData(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { page++; getData(); } }); handle=new MyHandle(); list1=new ArrayList<>(); adapter=new MyAdapter(this,list1); lv.setAdapter(adapter); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { NewsList newsList= list1.get(position-1); String url=newsList.getUrl(); Intent intent=new Intent(view.getContext(),Main2Activity.class); intent.putExtra("url",url); startActivity(intent); } }); getData(); // new Thread(runable).start(); } private void getData(){ if(thread==null){ thread=new MyThread(); thread.start(); } } class MyThread extends Thread{ @Override public void run() { super.run(); Message message=null; if(page==1){ result=loadingGet(url+String.valueOf(PAGE)); message= handle.obtainMessage(PAGE,result); }else { result=loadingGet(url+String.valueOf(page)); message= handle.obtainMessage(LOADING,result); } handle.sendMessage(message); thread=null; } } /** * 自定义访问网络的get方法,获取数据 */ private String loadingGet(String url0){ try { URL newUrl=new URL(url0); HttpsURLConnection conn= (HttpsURLConnection) newUrl.openConnection(); int code=conn.getResponseCode(); if(code==200){ InputStream inputStream=conn.getInputStream(); InputStreamReader isreader=new InputStreamReader(inputStream); String line=""; BufferedReader reader=new BufferedReader(isreader); StringBuffer buffer=new StringBuffer(); while ((line=reader.readLine())!=null){ buffer.append(line); } reader.close(); isreader.close(); inputStream.close(); return buffer.toString(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "访问失败"; } /** * ⑤自定义Handle类接收并处理数据 * */ class MyHandle extends Handler{ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case PAGE: // String url1=url+String.valueOf(PAGE); list1=parseJosn(msg.obj.toString()); adapter.setList(list1); adapter.notifyDataSetChanged(); // lv.setAdapter(adapter); break; case LOADING: // String url2=url+String.valueOf(LOADING); list1.addAll(parseJosn(msg.obj.toString())); adapter.notifyDataSetChanged(); // lv.setAdapter(adapter); break; } lv.onRefreshComplete();//完成刷新 } } // Runnable runable =new Runnable() { // @Override // public void run() { // result=loadingGet(); // Message message=handle.obtainMessage(1,result); // handle.sendMessage(message); // } // };
新闻详情页Main2Acvitity
public class Main2Activity extends AppCompatActivity { private WebView wv; private String url_content; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); wv= (WebView) findViewById(R.id.wv); wv.setWebViewClient(new MyClient()); Intent intent=getIntent(); url_content=intent.getStringExtra("url"); wv.loadUrl(url_content); wv.getSettings().setBuiltInZoomControls(true);//支持缩放 wv.getSettings().setJavaScriptEnabled(true);//允许支持JS脚本(网页动态效果) } class MyClient extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //过时的方法用于sdk版本小于21的 view.loadUrl(url_content); return super.shouldOverrideUrlLoading(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { //当Sdk版本大于21时才能使用此方法 if(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP){ view.loadUrl(request.getUrl().toString()); } return super.shouldOverrideUrlLoading(view, request); } }
相关文章推荐
- 使用WinHttp接口实现HTTP协议Get、Post和文件上传功能
- 实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现
- Android HTTP实例 使用GET方法和POST方法发送请求(通过Apache接口实现)
- 使用WinHttp接口实现HTTP协议Get、Post和文件上传功能
- 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现
- 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现
- 使用HTTP GET请求12306网站接口获取车站名和车站Code
- C#实现http协议支持上传下载文件的GET、POST请求
- android(21)(使用HttpURLConnection,HttpClient和AsyncHttpClient分别实现post和get请求数据)
- 微信开发中使用curl实现http与https的post级get请求实例教程(附工程代码)
- 使用HttpGet协议与正则表达实现桌面版的糗事百科
- .NET获取聚合数据接口数据(Http协议POST和GET请求)
- .NET实现HTTP协议中的GET、POST请求
- java实现:http协议get和post方法的url参数请求响应及交互
- 【转】C# 实现http协议GET、POST请求
- C#实现http协议支持上传下载文件的GET、POST请求
- Android中使用HttpURLConnection和HttpClient实现GET和POST请求访问网络
- python+requests实现接口测试 - get与post请求使用( params
- java使用socket实现http简单get请求
- C#实现http协议GET、POST请求 2010-10-11 16