您的位置:首页 > 理论基础 > 计算机网络

网易新闻API接口的实现(Picasso类库的使用与HTTP协议的get请求,BitMap样例(未使用))

2017-03-16 12:54 417 查看
实体类

自定义adapter

MainAcvitity

新闻详情页Main2Acvitity

实体类:

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

@Overri
dac6
de
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: