一個小玩意兒 第一App 歷史的今天 簡單的API藉口數據獲取

<span style="font-size:18px;">
</span>
<span style="font-size:18px;"><img src="https://img-blog.csdn.net/20160402225506808?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
</span>
<span style="font-size:18px;">package com.imooc.admin.todayhistory;

import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends Activity {
    public static final int SHOW_RESPONSE = 0;
    private Button button_get;
    private Button button_select;
    private ListView show;


    final Calendar c = Calendar.getInstance();
    int mainYear = c.get(Calendar.YEAR);
    int mainMonth = c.get(Calendar.MONTH);//獲取當前的月份
    int mainday = c.get(Calendar.DAY_OF_MONTH);//獲取當前月份的日期號碼 ;

    int year = 0;
    int month = 0;
    int day = 0;

    int[] dateGet;
    AlertDialog dialog;
    //建立這個handler 用來發送和接收
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            //對接收到的message進行分類
            switch (msg.what) {
                case SHOW_RESPONSE:
                    SimpleAdapter simpleAdapter = (SimpleAdapter) msg.obj;
                    show.setAdapter(simpleAdapter);
                    //ViewBinder該類可以幫助SimpleAdapter加載圖片(如:Bitmap,Drawable)
                    simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {
                        @Override
                        public boolean setViewValue(View view, Object data, String textRepresentation) {
                            //判斷如果這個view(這裏具體指imageView)是否爲imageView 而且 傳入的數據是否是bitmap類型
                            if (view instanceof ImageView && data instanceof Bitmap) {
                                //如果是 那麼獲得這個View
                                ImageView iv = (ImageView) view;
                                //爲view 添加bitmap圖片
                                iv.setImageBitmap((Bitmap) data);
                                return true;
                            } else {
                                return false;
                            }
                        }

                    });
                    break;
                case 12345:
                    //傳回來的message.obj爲數組類型 包含了月和日
                    int[] mainDate = (int[]) msg.obj;
                    month = mainDate[0];
                    day = mainDate[1];
                    senRequestWithHttpConnection();
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        show = (ListView) findViewById(R.id.listView);
        button_select = (Button) findViewById(R.id.button_select);
        //選擇日期按鈕點擊事件
        button_select.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //點擊以後彈出Dialog 然後在Dialog中裝入了一個view view中包含的是一個datePicker
                final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("請選擇時間");
                LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
                View view = View.inflate(MainActivity.this, R.layout.date, null);
                final DatePicker dp = (DatePicker) view.findViewById(R.id.datePicker);
                /*
                datePicker的的觸發事件應該是 時間set事件
                init()方法
                參數:
                1.dataPicker的默認年
                2.默認月
                3.默認日
                4.new一個事件set事件
                 */
                dp.init(mainYear, mainMonth, mainday, new DatePicker.OnDateChangedListener() {
                    @Override
                    public void onDateChanged(DatePicker view, int arg1, int arg2, int arg3) {
                        /*
                        以上參數分別爲 選中的view 選中的時間 選中的月 選中的日
                        ps:
                        這裏選中的年月日中月份是從0開始
                        比實際要選中的月份要小1  所以在傳出這個月份的時候 加1
                         */
                        int month = arg2 + 1;
                        int day = arg3;
                        dateGet = new int[]{month, day};
                        //新建message 並設置what obj 屬性
                        Message msg_date = new Message();
                        msg_date.what = 12345;
                        msg_date.obj = dateGet;
                        //發送消息
                        handler.sendMessage(msg_date);
                        //這裏設置爲點擊以後dialog關閉
                        MainActivity.this.dialog.dismiss();
                    }
                });
                builder.setView(view);
                dialog = builder.show();
            }
        });
    }


    private void senRequestWithHttpConnection() {
        //開啓線程
        new Thread(new Runnable() {
            @Override
            public void run() {

                HttpURLConnection connection = null;
                try {
                    URL url = new URL("http://api.juheapi.com/japi/toh?key=b468fc4c9adc2ca464abeb8bffc501b7&v=1.0&month=" + month + "&day=" + day);
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    InputStream in = connection.getInputStream();
                    //對獲取到的輸入流進行讀取
                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                    }
                    Message message = new Message();
                    message.what = SHOW_RESPONSE;
                    //服務器結果放在Message中

                    List<Map<String, Object>> b = parseJOSNWthJONSObject(response.toString());
                    SimpleAdapter simpleAdapter = getSimpleAdapter(b);
                    message.obj = simpleAdapter;
                    handler.sendMessage(message);
                } catch (Exception e) {
                    e.printStackTrace();

                } finally {
                    if (connection != null) {
                        connection.disconnect();
                    }
                }


            }
        }).start();
    }

    private SimpleAdapter getSimpleAdapter(List<Map<String, Object>> b) {

        /*使用SimpleAdapter作爲數據適配器
        參數:
        1.上下文;
        2.傳入的list 一般是list<extends? Map<?,?>>類型
        3.需要加載的佈局文件item
        4.HashMap中的key String組成的字符串數組
        5.從Map中由key解析出的具體內容對應在佈局上的控件的ID int[]數組
        */
        SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, b, R.layout.simple_item,
                new String[]{"title", "date", "pic", "des"}, new int[]{R.id.title_show,
                R.id.date_show, R.id.image_show, R.id.des_show});
        return adapter;

    }


    private List<Map<String, Object>> parseJOSNWthJONSObject(String josnDate) {
        List<Map<String, Object>> a = new ArrayList<Map<String, Object>>();
        Bitmap bitmapWeNeed = null;
        try {
            JSONObject result = new JSONObject(josnDate);
            String resultDate = result.getString("result");
            JSONArray array = new JSONArray(resultDate);
            for (int i = 0; i < array.length(); i++) {
                JSONObject object = array.getJSONObject(i);
                //{"_id":"11201101",
                // "day":1,
                // "des":"在896年前的今天,1120年11月1日 (農曆十月初九),北宋江南方臘起義。",
                // "lunar":"",
                // "month":11,
                // "pic":"http://juheimg.oss-cn-hangzhou.aliyuncs.com/toh/201109/18/7D2278978.jpg",
                // "title":"北宋江南方臘起義",
                // "year":1120}
                String _id = object.getString("_id");
                int day = object.getInt("day");
                String des = object.getString("des");
                String lunar = object.getString("lunar");
                int month = object.getInt("month");
                String pic = object.getString("pic");
                String title = object.getString("title");
                int year = object.getInt("year");

                bitmapWeNeed = weGetBitmap(pic);
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("title", title);
                map.put("date", year + "年" + month + "月" + day + "日");
                map.put("pic", bitmapWeNeed);
                map.put("des", des);
                a.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return a;
    }

    private Bitmap weGetBitmap(String url) {
        Bitmap bitmap = null;
        try {
            URL urlBitmap = new URL(url);
            InputStream is = urlBitmap.openStream();
            bitmap = BitmapFactory.decodeStream(is);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return bitmap;
    }
}

</span>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章