新闻客户端代码解析

来源:互联网 发布:知轩藏书盗墓笔记 编辑:程序博客网 时间: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. 利用HttpURLConnectionInputStream得到网页中的数据

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>


0 0
原创粉丝点击