我想说我刚写的博客不见了,于是打算去玩的计划取消,滚回来重写了
首先呢是设置权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
然后呢我们要导入包
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile files('libs/httpclient-4.4.1.jar') compile files('libs/httpcore-4.4.1.jar') }
导完之后不要忘记加这个
packagingOptions {//导入http包的时候必须要加的以下这段话 exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' }
好啦 让我们再一次愉快地敲起代码来
首先当然是加线程啦,像访问网络这种复杂的事情,哀家是不会自己做的,发配给我的子民去完成吧
private class thread implements Runnable{ @Override public void run() { String todayStart = "http://api.k780.com:88/?app=weather.today&weaid="; String todayCity = local.getText().toString(); String todayEnd = "&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"; String todayWeather = getURLConnection(todayStart + todayCity + todayEnd); System.out.println("11111"+todayWeather); Message msg = new Message(); Bundle bundle = new Bundle(); bundle.putString("todayWeather", todayWeather); msg.setData(bundle); //getBitmap(URL); handler.sendMessage(msg); } }
然后线程中有一个方法是获取接口中的内容
private String getURLConnection(String path){ String xml = ""; try { HttpClient client = new DefaultHttpClient();//创建一个http对象 HttpGet get = new HttpGet(path); HttpResponse response = client.execute(get); int code = response.getStatusLine().getStatusCode();//得到http响应结果的状态代码 Log.d("http", "code"); if(code==200){ //getEntity()是获取实体,getContent()是获取数据流 InputStream reader = response.getEntity().getContent(); BufferedReader bf = new BufferedReader(new InputStreamReader(reader)); String list = bf.readLine();//读一行 while(list!=null){ xml += list; list = bf.readLine(); } } } catch (IOException e) { e.printStackTrace(); } System.out.println("22222" + xml); return xml; }做完之后呢 要使用handler处理一下
public class Myhandler extends Handler { public void handleMessage(Message msg) { String todayWeather = msg.getData().getString("todayWeather"); if(!todayWeather.equals("")){ try { todayWeather = String.valueOf(new JSONObject(todayWeather).getJSONObject("result")); JSONObject json = new JSONObject(todayWeather); time.setText(json.getString("days")); temp.setText(json.getString("temperature")); weather.setText(json.getString("weather")); wind.setText(json.getString("wind")); URL = json.getString("weather_icon"); thread2 t2 = new thread2(); t2.start(); } catch (JSONException e) { e.printStackTrace(); } } } }在handler里面通过json解析,获取我们要的东西啦
如果宝宝们还想通过天气更改图标的话就要再加一个线程啦
private class thread2 extends Thread{ @Override public void run() { try{ URL myUrl = new URL(URL); HttpURLConnection conn = (HttpURLConnection)myUrl.openConnection(); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("GET"); conn.connect(); Log.d("abc",String.valueOf(conn.getResponseCode())); InputStream is = conn.getInputStream(); Log.d("is", String.valueOf(is)); bitmap = BitmapFactory.decodeStream(is); Log.d("nine", "true"); is.close(); Message m = Message.obtain(); m.what=2; phandler.sendMessage(m); Log.d("is","true"); } catch (Exception e) { e.printStackTrace(); } Log.d("bitmap", "true"); } }然后处理,将获取的图片添加到ui中
public class Phandler extends Handler { public void handleMessage(Message msg) { if(msg.what==2){ pic.setImageBitmap(bitmap); } } }由于我一开始对线程不太理解,所以在这里浪费了很多时间,其实就是主线程呢自己不想做太复杂的事情,然后他就把事情交给苦逼的子线程去做,子线程做完了呢,主线程使用handler处理一下就ok了.
好啦,终于把总结写完了,安卓学了这么久也还是不太会,有啥理解错的就告诉我吧,这次我真的要开心的去玩耍了