public
class
WatchingActivity
extends
Activity
implements
OnClickListener, OnItemClickListener
{
private
ListView mListView;
private
HashMap<URL, Bitmap> mCacheMap =
new
HashMap<URL, Bitmap>();
private
View errorView;
private
View loadingview;
private
RelativeLayout errorlayout;
private
Button btn_netRetry;
private
View headview;
private
View footview;
private
View btn_footviewloading;
private
TextView btn_loadmore;
private
int
mPage =
1
;
private
BaseAdapter mAdapter;
private
ArrayList<ItemData> mDataList =
new
ArrayList<ItemData>();
private
View headviewad;
private
View imageBtn_refresh;
class
ItemData
{
String imageUrl;
String title;
String from;
String time;
String content;
public
ItemData(String imageUrl, String title, String from,
String time, String content)
{
super
();
this
.imageUrl = imageUrl;
this
.title = title;
this
.from = from;
this
.time = time;
this
.content = content;
}
}
class
ViewHolder
{
ImageView imageView;
TextView textView_title;
TextView textView_from;
TextView textView_time;
ProgressBar progressBar_imageLoading;
}
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_watching);
setUI();
}
private
void
setUI()
{
LayoutInflater inflater = getLayoutInflater();
headview = inflater.inflate(R.layout.headview,
null
);
footview = inflater.inflate(R.layout.footview,
null
);
btn_footviewloading = footview.findViewById(R.id.footview_loading);
btn_loadmore = (TextView) footview.findViewById(R.id.btn_loadmore);
headviewad = headview.findViewById(R.id.imageView_headview_ad);
imageBtn_refresh = findViewById(R.id.imageBtn_refresh);
btn_netRetry = (Button) findViewById(R.id.btn_netRetry);
loadingview = findViewById(R.id.loadingview);
errorView = findViewById(R.id.errorview);
mListView = (ListView) findViewById(R.id.listView_watching);
mListView.addHeaderView(headview);
mListView.addFooterView(footview);
loadTask();
btn_netRetry.setOnClickListener(
this
);
btn_loadmore.setOnClickListener(
this
);
headviewad.setOnClickListener(
this
);
btn_netRetry.setOnClickListener(
this
);
mListView.setOnItemClickListener(
this
);
}
@Override
public
void
onClick(View v)
{
switch
(v.getId())
{
case
R.id.btn_netRetry:
errorView.setVisibility(View.GONE);
mPage =
1
;
loadTask();
break
;
case
R.id.btn_loadmore:
btn_loadmore.setVisibility(View.INVISIBLE);
btn_footviewloading.setVisibility(View.VISIBLE);
loadTask();
break
;
case
R.id.imageView_headview_ad:
Toast.makeText(WatchingActivity.
this
, Contant.HEADVIEW_TOAST, Toast.LENGTH_LONG).show();
break
;
case
R.id.imageBtn_refresh:
loadTask();
break
;
default
:
break
;
}
}
@Override
public
void
onItemClick(AdapterView<?> parent, View view,
int
position,
long
id)
{
if
(view.getId() == R.id.watching_item)
{
Intent intent =
new
Intent(WatchingActivity.
this
, ContentActivity.
class
);
ItemData data = mDataList.get(position -
1
);
String fromtime = data.from +
" "
+ Contant.TIME_YEAR + data.time;
intent.putExtra(Contant.KEY_INTENTER_TITLE, data.title);
intent.putExtra(Contant.KEY_INTENTER_FROMTIME, fromtime);
intent.putExtra(Contant.KEY_INTENTER_CONTENT, data.content);
startActivity(intent);
}
}
private
void
loadTask()
{
URL dataUrl =
null
;
try
{
dataUrl =
new
URL(Contant.URL_DATA + mPage + Contant.URL_DATA_FILEFORM);
LoadDataTask loadDataTask =
new
LoadDataTask();
loadDataTask.execute(dataUrl);
}
catch
(MalformedURLException e)
{
e.printStackTrace();
}
}
class
LoadDataTask
extends
AsyncTask<URL, Void, String>
{
@Override
protected
void
onPreExecute()
{
loadingview.setVisibility(View.VISIBLE);
}
@Override
protected
String doInURL... params)
{
InputStream is =
null
;
ByteArrayBuffer strBuf =
new
ByteArrayBuffer(
59658
);
try
{
HttpURLConnection conn = (HttpURLConnection) params[
0
].openConnection();
conn.setConnectTimeout(Contant.HTTP_TIME_OUT);
conn.setReadTimeout(Contant.HTTP_TIME_OUT);
if
(conn.getResponseCode() != HttpURLConnection.HTTP_OK)
{
return
null
;
}
is = conn.getInputStream();
byte
[] buf =
new
byte
[
1024
];
int
len =
0
;
while
(-
1
!= (len = is.read(buf)))
{
strBuf.append(buf,
0
, len);
}
}
catch
(IOException e)
{
e.printStackTrace();
}
finally
{
if
(is !=
null
)
{
try
{
is.close();
}
catch
(IOException e)
{
e.printStackTrace();
}
}
}
return
new
String(strBuf.buffer());
}
@Override
protected
void
onPostExecute(String result)
{
loadingview.setVisibility(View.GONE);
if
(TextUtils.isEmpty(result.trim()))
{
btn_loadmore.setVisibility(View.GONE);
errorView.setVisibility(View.VISIBLE);
mListView.setVisibility(View.GONE);
}
else
{
btn_loadmore.setVisibility(View.VISIBLE);
btn_footviewloading.setVisibility(View.INVISIBLE);
mListView.setVisibility(View.VISIBLE);
ArrayList<ItemData> dataList = parse(result);
setListData(dataList);
}
}
}
private
void
setListData(ArrayList<ItemData> dataList)
{
if
(
null
== mAdapter)
{
createAdapter(dataList);
mListView.setAdapter(mAdapter);
}
else
{
mAdapter.notifyDataSetChanged();
}
}
private
ArrayList<ItemData> parse(String result)
{
try
{
JSONArray jsonArray =
new
JSONArray(result);
mPage++;
for
(
int
i =
0
; i < jsonArray.length(); i++)
{
JSONObject jsonObject = jsonArray.getJSONObject(i);
String imageUrl = Contant.URL_HOST + jsonObject.getString(Contant.KEY_JSON_IMGURL);
String title = jsonObject.getString(Contant.KEY_JSON_TITLE);
String from = jsonObject.getString(Contant.KEY_JSON_FROM);
String time = jsonObject.getString(Contant.KEY_JSON_TIME);
String content = jsonObject.getString(Contant.KEY_JSON_CONTENT);
ItemData itemData =
new
ItemData(imageUrl, title, from, time,content);
mDataList.add(itemData);
}
}
catch
(JSONException e)
{
e.printStackTrace();
}
return
mDataList;
}
private
void
createAdapter(
final
ArrayList<ItemData> dataList)
{
mAdapter =
new
BaseAdapter()
{
@Override
public
View getView(
int
position, View convertView,ViewGroup parent)
{
ViewHolder holder;
if
(convertView ==
null
)
{
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.watch_layout,
null
);
holder =
new
ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.imgView_watch_newspic);
holder.textView_title = (TextView) convertView.findViewById(R.id.txtView_watch_title);
holder.textView_from = (TextView) convertView.findViewById(R.id.txtView_from);
holder.textView_time = (TextView) convertView.findViewById(R.id.txtView_time);
holder.progressBar_imageLoading = (ProgressBar) convertView.findViewById(R.id.progressBar_imageloading);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
ItemData itemData = dataList.get(position);
try
{
URL url =
new
URL(itemData.imageUrl);
if
(mCacheMap.containsKey(url))
{
holder.imageView.setImageBitmap(mCacheMap.get(url));
}
else
{
LoadImageTask imageTask =
new
LoadImageTask(holder.imageView,holder.progressBar_imageLoading);
imageTask.execute(url);
}
}
catch
(MalformedURLException e)
{
e.printStackTrace();
}
holder.textView_title.setText(itemData.title);
holder.textView_from.setText(itemData.from);
holder.textView_time.setText(itemData.time);
return
convertView;
}
@Override
public
long
getItemId(
int
position)
{
return
0
;
}
@Override
public
Object getItem(
int
position)
{
return
null
;
}
@Override
public
int
getCount()
{
return
dataList.size();
}
};
}
class
LoadImageTask
extends
AsyncTask<URL, Void, Bitmap>
{
private
ImageView imageView;
ProgressBar progressBar_imageLoading;
public
LoadImageTask(ImageView imageView, ProgressBar progressBar_imageLoading)
{
this
.imageView = imageView;
this
.progressBar_imageLoading = progressBar_imageLoading;
}
@Override
protected
void
onPreExecute()
{
progressBar_imageLoading.setVisibility(View.VISIBLE);
}
@Override
protected
Bitmap doInURL... params)
{
InputStream is =
null
;
Bitmap bitmap =
null
;
try
{
HttpURLConnection conn = (HttpURLConnection) params[
0
].openConnection();
conn.setConnectTimeout(Contant.HTTP_TIME_OUT);
conn.setReadTimeout(Contant.HTTP_TIME_OUT);
if
(conn.getResponseCode() != HttpURLConnection.HTTP_OK)
{
return
null
;
}
is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
mCacheMap.put(params[
0
], bitmap);
}
catch
(IOException e)
{
e.printStackTrace();
}
finally
{
if
(
null
!= is )
{
try
{
is.close();
}
catch
(IOException e)
{
e.printStackTrace();
}
}
}
return
bitmap;
}
@Override
protected
void
onPostExecute(Bitmap bitmap)
{
if
(bitmap ==
null
)
{
}
else
{
progressBar_imageLoading.setVisibility(View.INVISIBLE);
imageView.setImageBitmap(bitmap);
}
}
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.watching, menu);
return
true
;
}
}