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