網易新聞API介面的實現(Picasso類庫的使用與HTTP協議的get請求,BitMap樣例(未使用))
阿新 • • 發佈:2019-01-31
實體類:
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);//此處不能new,不然報空指標
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);
// Bitmap bitmap=getHttpBitmap(news.getPicUrl());
// holder.iv_pic.setImageBitmap(bitmap);
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.setConnectTimeout(5000);//限定時間5s,0表示沒有時間限制
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();
// new Thread(runable).start();
}
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:
// String url1=url+String.valueOf(PAGE);
list1=parseJosn(msg.obj.toString());
adapter.setList(list1);
adapter.notifyDataSetChanged();
// lv.setAdapter(adapter);
break;
case LOADING:
// String url2=url+String.valueOf(LOADING);
list1.addAll(parseJosn(msg.obj.toString()));
adapter.notifyDataSetChanged();
// lv.setAdapter(adapter);
break;
}
lv.onRefreshComplete();//完成重新整理
}
}
// Runnable runable =new Runnable() {
// @Override
// public void run() {
// result=loadingGet();
// Message message=handle.obtainMessage(1,result);
// handle.sendMessage(message);
// }
// };
新聞詳情頁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);//允許支援JS指令碼(網頁動態效果)
}
class MyClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//過時的方法用於sdk版本小於21的
view.loadUrl(url_content);
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
//當Sdk版本大於21時才能使用此方法
if(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP){
view.loadUrl(request.getUrl().toString());
}
return super.shouldOverrideUrlLoading(view, request);
}
}