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