新闻客户端代码解析

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 stub

super.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中的javascript

webView.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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值