自己想做一个简单的天气预报,由于能力有限,暂时做个简单的。
大概讲一下自己的开发步骤吧。
第一步:获得可以开发的json数据的及时更新的接口。
通过强大的度娘,我这里使用的json的地址是:http://wthrcdn.etouch.cn/weather_mini?citykey=101010100
第二步:实现各大城市编号的获取
实现方法:网上下载一个包含各大城市的db文件db_weather.db,下载地址:http://pan.baidu.com/s/1hqkxlxM
这个db文件里面包含中国各大省份及城市编号,里面的大概内容截图如下所示
这个是省份表:
这个是城市表:
把这个db文件下载下来,通过DDMS,把这个文件放到android测试机的/sdcard目录下
然后编写一些界面响应,获取省份 以及城市的编号,例如北京:101010100
获取省份和城市编号的代码如下
以下是MainActivity的代码(初次写,很多方法没有进行封装,日后有机会进行代码优化)
1 package com.oysd.mywea; 2 3 import java.io.File; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import android.app.Activity; 8 import android.content.Intent; 9 import android.database.Cursor; 10 import android.database.sqlite.SQLiteDatabase; 11 import android.os.Bundle; 12 import android.view.Menu; 13 import android.view.MenuItem; 14 import android.view.View; 15 import android.view.View.OnClickListener; 16 import android.widget.AdapterView; 17 import android.widget.AdapterView.OnItemSelectedListener; 18 import android.widget.ArrayAdapter; 19 import android.widget.Button; 20 import android.widget.Spinner; 21 import android.widget.Toast; 22 23 public class MainActivity extends Activity { 24 25 private File f = new File("/sdcard/weather/db_weather.db"); 26 private Spinner province;//省份 27 private Spinner city;//城市 28 private List<String> proset=new ArrayList<String>();//省份集合 29 private List<String> cityset=new ArrayList<String>();//城市集合 30 private Button showWea; 31 private int pro_id;//省份id号 32 private long city_num; 33 private String pro_name; 34 35 @Override 36 protected void onCreate(Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 setContentView(R.layout.activity_main); 39 40 province = (Spinner) findViewById(R.id.provinces); 41 city = (Spinner) findViewById(R.id.city); 42 showWea = (Button) findViewById(R.id.showWea); 43 44 ArrayAdapter<String> pro_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, getProSet()); 45 province.setAdapter(pro_adapter); 46 province.setOnItemSelectedListener(new SelectProvince());//添加省份监听 47 48 city.setOnItemSelectedListener(new SelectCity());//添加城市选择监听 49 showWea.setOnClickListener(new OnClickListener() { 50 51 @Override 52 public void onClick(View v) { 53 // TODO Auto-generated method stub 54 55 Bundle b = new Bundle(); 56 b.putLong("city_num", city_num); 57 b.putString("pro_name", pro_name); 58 Intent intent = new Intent(MainActivity.this , WeaActivity.class); 59 intent.putExtras(b); 60 startActivity(intent); 61 } 62 }); 63 } 64 65 /** 66 * 增加省份监听类 67 * @author Administrator 68 * 69 */ 70 class SelectProvince implements OnItemSelectedListener{ 71 72 @Override 73 public void onItemSelected(AdapterView<?> parent, View view, int position, 74 long id) { 75 // TODO Auto-generated method stub 76 pro_id = position; 77 pro_name = getProName(); 78 city.setAdapter(getAdapter()); 79 } 80 81 @Override 82 public void onNothingSelected(AdapterView<?> arg0) { 83 // TODO Auto-generated method stub 84 85 } 86 87 } 88 89 class SelectCity implements OnItemSelectedListener{ 90 91 @Override 92 public void onItemSelected(AdapterView<?> parent, View view, int position, 93 long id) { 94 // TODO Auto-generated method stub 95 96 String cityname = parent.getItemAtPosition(position).toString(); 97 city_num = getCityNum(position); 98 99 //提示一下 100 Toast.makeText(getApplicationContext(), cityname+":" + city_num, 2000).show(); 101 102 } 103 104 @Override 105 public void onNothingSelected(AdapterView<?> arg0) { 106 // TODO Auto-generated method stub 107 108 } 109 110 } 111 112 /** 113 * 返回省份集合 114 */ 115 public List<String> getProSet(){ 116 //打开数据库 117 SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(f, null); 118 Cursor cursor = db1.query("provinces", null, null, null, null, null, null); 119 while(cursor.moveToNext()){ 120 String pro = cursor.getString(cursor.getColumnIndexOrThrow("name")); 121 proset.add(pro); 122 } 123 cursor.close(); 124 db1.close(); 125 return proset; 126 } 127 128 /** 129 * 返回城市集合 130 */ 131 public List<String> getCitySet(int pro_id){ 132 cityset.clear();//清空一下城市列表 133 134 SQLiteDatabase db2 = SQLiteDatabase.openOrCreateDatabase(f, null); 135 Cursor cursor = db2.query("citys", null, "province_>); 136 while(cursor.moveToNext()){ 137 String city = cursor.getString(cursor.getColumnIndexOrThrow("name")); 138 cityset.add(city); 139 } 140 cursor.close(); 141 db2.close(); 142 return cityset; 143 } 144 145 /** 146 * 返回城市的编号 147 * @param position 148 * @return 149 */ 150 public long getCityNum(int position){ 151 SQLiteDatabase db3 = SQLiteDatabase.openOrCreateDatabase(f, null); 152 Cursor cursor = db3.query("citys", null, "province_>); 153 cursor.moveToPosition(position); 154 long citynum = cursor.getLong(cursor.getColumnIndexOrThrow("city_num")); 155 cursor.close(); 156 db3.close(); 157 return citynum; 158 } 159 160 /** 161 * 获取省份名字 162 * @return 163 */ 164 public String getProName(){ 165 SQLiteDatabase db4 = SQLiteDatabase.openOrCreateDatabase(f, null); 166 int pp = pro_id + 1; 167 Cursor cursor = null; 168 169 cursor = db4.query("provinces", null, "_>); 170 //cursor.moveToPosition(0); 171 String proname = null; 172 while(cursor.moveToNext()){ 173 proname = cursor.getString(cursor.getColumnIndex("name")); 174 } 175 cursor.close(); 176 db4.close(); 177 return proname; 178 } 179 /** 180 * 返回选择城市的适配器 181 * @return 182 */ 183 public ArrayAdapter<String> getAdapter(){ 184 ArrayAdapter<String> city_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, getCitySet(pro_id)); 185 return city_adapter; 186 } 187 }