1. 程式人生 > >網易新聞API介面的實現(Picasso類庫的使用與HTTP協議的get請求,BitMap樣例(未使用))

網易新聞API介面的實現(Picasso類庫的使用與HTTP協議的get請求,BitMap樣例(未使用))

實體類:

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