实体类:
public class NewsList implements Serializable {
private String ctime,title,description,picUrl,url;
public NewsList () {
}
public NewsList (String ctime, String title, String description, String picUrl, String url) {
this .ctime = ctime;
this .title = title;
this .description = description;
this .picUrl = picUrl;
this .url = url;
}
public String getCtime () {
return ctime;
}
public void setCtime (String ctime) {
this .ctime = ctime;
}
public String getTitle () {
return title;
}
public void setTitle (String title) {
this .title = title;
}
public String getDescription () {
return description;
}
public void setDescription (String description) {
this .description = description;
}
public String getPicUrl () {
return picUrl;
}
public void setPicUrl (String picUrl) {
this .picUrl = picUrl;
}
public String getUrl () {
return url;
}
public void setUrl (String url) {
this .url = url;
}
}
自定义adapter:
public class MyAdapter extends BaseAdapter {
private Context context;
private List<NewsList> list;
private LayoutInflater inflater;
public MyAdapter (Context context, List<NewsList> list) {
this .context = context;
this .list = list;
inflater=LayoutInflater.from(context);
}
public void setList (List<NewsList> list) {
this .list = list;
}
@Override
public int getCount () {
return list.size();
}
@Override
public Object getItem (int position) {
return list.get(position);
}
@Override
public long getItemId (int position) {
return position;
}
@Override
public View getView (int position, View convertView, ViewGroup parent) {
ViewHolder holder=null ;
if (convertView==null ){
holder=new ViewHolder();
convertView=inflater.inflate(R.layout.newslist_item,null );
holder.iv_pic= (ImageView) convertView.findViewById(R.id.iv_pic);
holder.tv_desc= (TextView) convertView.findViewById(R.id.tv_desc);
holder.tv_title= (TextView) convertView.findViewById(R.id.tv_title);
holder.tv_ctime= (TextView) convertView.findViewById(R.id.tv_ctime);
convertView.setTag(holder);
}else {
holder= (ViewHolder) convertView.getTag();
}
NewsList news= (NewsList) getItem(position);
holder.tv_title.setText(news.getTitle().toString());
holder.tv_desc.setText(news.getDescription().toString());
holder.tv_ctime.setText(news.getCtime().toString());
Picasso.with(context).load(news.getPicUrl()).into(holder.iv_pic);
return convertView;
}
class ViewHolder {
private ImageView iv_pic;
private TextView tv_title,tv_desc,tv_ctime;
}
/**
* 根据图片url获取网络图片的Bitmap
*/
public static Bitmap getHttpBitmap (String url){
URL url1;
Bitmap bitmap=null ;
try {
url1=new URL(url);
HttpURLConnection conn= (HttpURLConnection) url1.openConnection();
conn.setDoInput(true );
conn.setDoOutput(true );
conn.setUseCaches(false );
InputStream is=conn.getInputStream();
bitmap=BitmapFactory.decodeStream(is);
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
MainAcvitity
public class MainActivity extends AppCompatActivity {
private PullToRefreshListView lv;
private String url="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=" ;
private MyThread thread=null ;
private String result=null ;
private MyHandle handle=null ;
private List<NewsList> list1;
public static final int PAGE=1 ;
public static final int LOADING=2 ;
public int page =1 ;
private MyAdapter adapter=null ;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv= (PullToRefreshListView) findViewById(R.id.lv);
lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh (PullToRefreshBase<ListView> refreshView) {
page=1 ;
getData();
}
@Override
public void onPullUpToRefresh (PullToRefreshBase<ListView> refreshView) {
page++;
getData();
}
});
handle=new MyHandle();
list1=new ArrayList<>();
adapter=new MyAdapter(this ,list1);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
NewsList newsList= list1.get(position-1 );
String url=newsList.getUrl();
Intent intent=new Intent(view.getContext(),Main2Activity.class);
intent.putExtra("url" ,url);
startActivity(intent);
}
});
getData();
}
private void getData (){
if (thread==null ){
thread=new MyThread();
thread.start();
}
}
class MyThread extends Thread{
@Override
public void run () {
super .run();
Message message=null ;
if (page==1 ){
result=loadingGet(url+String.valueOf(PAGE));
message= handle.obtainMessage(PAGE,result);
}else {
result=loadingGet(url+String.valueOf(page));
message= handle.obtainMessage(LOADING,result);
}
handle.sendMessage(message);
thread=null ;
}
}
/**
* 自定义访问网络的get方法,获取数据
*/
private String loadingGet (String url0){
try {
URL newUrl=new URL(url0);
HttpsURLConnection conn= (HttpsURLConnection) newUrl.openConnection();
int code=conn.getResponseCode();
if (code==200 ){
InputStream inputStream=conn.getInputStream();
InputStreamReader isreader=new InputStreamReader(inputStream);
String line="" ;
BufferedReader reader=new BufferedReader(isreader);
StringBuffer buffer=new StringBuffer();
while ((line=reader.readLine())!=null ){
buffer.append(line);
}
reader.close();
isreader.close();
inputStream.close();
return buffer.toString();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "访问失败" ;
}
/**
* ⑤自定义Handle类接收并处理数据
*
*/
class MyHandle extends Handler{
@Override
public void handleMessage (Message msg) {
super .handleMessage(msg);
switch (msg.what){
case PAGE:
list1=parseJosn(msg.obj.toString());
adapter.setList(list1);
adapter.notifyDataSetChanged();
break ;
case LOADING:
list1.addAll(parseJosn(msg.obj.toString()));
adapter.notifyDataSetChanged();
break ;
}
lv.onRefreshComplete();
}
}
新闻详情页Main2Acvitity
public class Main2Activity extends AppCompatActivity {
private WebView wv;
private String url_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
wv= (WebView) findViewById(R.id.wv);
wv.setWebViewClient(new MyClient());
Intent intent=getIntent();
url_content=intent.getStringExtra("url" );
wv.loadUrl(url_content);
wv.getSettings().setBuiltInZoomControls(true );
wv.getSettings().setJavaScriptEnabled(true );
}
class MyClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url_content);
return super .shouldOverrideUrlLoading(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP){
view.loadUrl(request.getUrl().toString());
}
return super .shouldOverrideUrlLoading(view, request);
}
}