新闻客户端代码解析
来源:互联网 发布:知轩藏书盗墓笔记 编辑:程序博客网 时间:2024/06/15 03:06
1.使用php生成新闻json数据
2.实现新闻列表界面布局
a) 用自定义适配器进行布局的填充
i. 首先创建一个继承baseadapter的类
ii. 实现它的unimplement方法,重点是getview
iii. 在getview里得到控件
if(convertView==null){convertView=LayoutInflater.from(context).inflate(R.layout.news_item, null);}TextView tvTitle=(TextView) convertView.findViewById(R.id.tvTitle);TextView tvDesc=(TextView) convertView.findViewById(R.id.tvDesc);TextView tvTime=(TextView) convertView.findViewById(R.id.tvTime);ImageView ivPic=(ImageView) convertView.findViewById(R.id.ivPic);
3.实现新闻列表界面的json数据解析和填充
a) 创建一个得到json数据的工具类来得到网页中的数据
i. 开启一个线程
ii. 利用HttpURLConnection和InputStream得到网页中的数据
iii. 把得到的数据反复追加到一个StringBuilder中
iv. 把数据传给一个handler
public static void getNewsJSON(final String url,final Handler handler){new Thread(new Runnable(){public void run() {HttpURLConnection conn;InputStream is;try {conn=(HttpURLConnection) new URL(url).openConnection();conn.setRequestMethod("GET");is=conn.getInputStream();BufferedReader reader=new BufferedReader(new InputStreamReader(is));String line="";StringBuilder result=new StringBuilder();while((line=reader.readLine())!=null){result.append(line);}Message msg=new Message();msg.obj=result.toString();handler.sendMessage(msg);} catch (Exception e) {e.printStackTrace();}}});}
b) 利用handler把数据传给mainactivty
i. 创建一个handler并实现handlemessage方法
ii. 在handlemessage中得到json工具类传来的数据
private Handler getNewsHandler = new Handler() {public void handleMessage(android.os.Message msg) {String jsonData = (String) msg.obj;try {JSONArray jsonArray = new JSONArray();for (int i = 0; i < jsonArray.length(); i++) {JSONObject object = jsonArray.getJSONObject(i);String title = object.getString("title");String desc = object.getString("desc");String time = object.getString("time");String content_url = object.getString("content_url");String pic_url = object.getString("pic_url");newsList.add(new news(title, desc, time, content_url,pic_url));adapter.notifyDataSetChanged();}} catch (Exception e) {e.printStackTrace();}};};
c) 解析JSON数据
i. 把json数据解析了
ii. 创建一个javabean来盛放数据
d) 把数据填充到listview中
i. 向adapter中传入list数据
ii. 在getview中进行数据的绑定
//綁定數據news news=newsList.get(position);tvTitle.setText(news.getTitle());tvTime.setText(news.getTime());tvDesc.setText(news.getDesc());String pic_url=news.getPic_url();HttpUtils.setPicBitmap(ivPic, pic_url);
iii. Utils中创建一个得到图片的类并开启一个线程
iv. 在线程中利用bitmap得到图片
public static void setPicBitmap(final ImageView ivPic,final String pic_url){new Thread(new Runnable(){public void run() {try {HttpURLConnection conn=(HttpURLConnection) new URL(pic_url).openConnection();conn.connect();InputStream is=conn.getInputStream();Bitmap bitmap=BitmapFactory.decodeStream(is);ivPic.setImageBitmap(bitmap);is.close();} catch (Exception e) {e.printStackTrace();}}}).start();}
v. 在getview中调用得到图片的类
4.实现新闻列表界面的跳转并显示详情
a) 创建一个新的activity
b) 为这个activity创建一个新的布局文件,添加一个webView控件
<WebView android:id="@+id/webView" android:layout_width="match_parent"android:layout_height="match_parent"/>
c) 利用loadURL进行网页的访问,并进行一些设置
protected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_browse_news);webView=(WebView) findViewById(R.id.webView);String pic_url=getIntent().getStringExtra("content_url");webView.loadUrl(pic_url);//使用webview中的javascriptwebView.getSettings().setJavaScriptEnabled(true);//当没有网络的时候就读取缓存webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}
d) 在MainActivity中监听一个item的点击事件
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {news news=newsList.get(position);Intent intent=new Intent(this,BrowseNewsActivity.class);intent.putExtra("content_url", news.getContent_url());startActivity(intent);}
e) 在点击事件中使用intent来跳转到webView和传输url数据
f) 把activity添加到清单文件中
<activity android:name="BrowseNewsActivity"></activity>
- 新闻客户端代码解析
- 新闻类客户端代码阅读笔记
- FTP客户端代码解析
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- 新闻客户端
- C# 进制转换
- 中断和中断程序(续!)
- POJ 1279 Art Gallery 半平面交+求多边形核的面积
- java自学笔记————内部类几种类型;
- 欢迎使用CSDN-markdown编辑器
- 新闻客户端代码解析
- eCognition 8 简介
- 递归使字符串逆序
- 数据存储之SQLite 数据库存储——第一行代码Android学习笔记
- eRevit Stairs Builder简介
- 关于C++中获取指定文件夹下的所有文件
- 4.9学习内容view保存状态,ios屏幕亮度调整
- 【源码剖析】Webbench —— 简洁而优美的压力测试工具
- python写exploit