学习了新闻客户端开发后,有很多是通用的,就把客户端用到的一些做个笔记,已备以后使用,主要用到的知识点有:
1. Android网络编程
2. Android中BaseAdapter的使用
3. Android中Webview的使用
网络编程工具类:
public class HttpUtils {
public static void getNewsJSON(final String url,final Handler handler){
new Thread(new Runnable() {
@Override
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();
}
}
}).start();
}
public static void setBitmap(final ImageView ivPic,final String pic_url){
new Thread(new Runnable() {
@Override
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
BaseAdapter 适配器:
public class NewsAdapter extends BaseAdapter {
private Context context;
private List newsList;
public NewsAdapter(Context context,List newsList) {
super();
this.context = context;
this.newsList = newsList;
}
@Override
public int getCount() {
return newsList.size();
}
@Override
public News getItem(int arg0) {
return newsList.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
if(arg1 == null){
arg1 = LayoutInflater.from(context).inflate(R.layout.news_item, null);
TextView tvTitle = (TextView) arg1.findViewById(R.id.tvTitle);
TextView tvDesc = (TextView) arg1.findViewById(R.id.tvdesc);
TextView tvTime = (TextView) arg1.findViewById(R.id.tvTime);
ImageView ivPic = (ImageView) arg1.findViewById(R.id.ivPic);
News news = newsList.get(arg0);
tvTitle.setText(news.getTitle());
tvDesc.setText(news.getDesc());
tvTime.setText(news.getTime());
String pic_url = news.getPic_url();
HttpUtils.setBitmap(ivPic, pic_url);
}
return arg1;
}
}
MainActivity界面:
public class MainActivity extends Activity implements OnItemClickListener{
private ListView lvNews;
private NewsAdapter adapter;
private List newsList;
public static final String GET_NEWS_URL="";
private Handler getNewsHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
String jsonData= (String) msg.obj;
System.out.println(jsonData);
try {
JSONArray jsonArray = new JSONArray(jsonData);
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();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvNews = (ListView) findViewById(R.id.lv_News);
newsList = new ArrayList();
adapter = new NewsAdapter(this,newsList);
lvNews.setOnItemClickListener(this); //设置监听
lvNews.setAdapter(adapter);//设置适配器
HttpUtils.getNewsJSON(GET_NEWS_URL, getNewsHandler);
}
@Override
public void onItemClick(AdapterView> arg0, View arg1, int position, long arg3) {
News news = newsList.get(position);
Intent intent = new Intent(this, BrowsNewsActivity.class);
intent.putExtra("content_url", news.getContent_url());
startActivity(intent);
}
}
BrowsNewsActivity界面:
public class BrowsNewsActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_brows_news); webView = (WebView) findViewById(R.id.webView); String content_url = getIntent().getStringExtra("content_url"); webView.loadUrl(content_url); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } }