一、网络基本连接代码
/** * 从指定url获取原始数据并返回一个字节流数组 * @param urlSpec 指定url * @return 字节流数组 * @throws IOException */ byte[] getUrlBytes(String urlSpec) throws IOException { URL url = new URL(urlSpec); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); //只有在调用该方法时才会真正连接 InputStream in = connection.getInputStream(); if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { return null; } int bytesRead = 0; byte[] buffer = new byte[1024]; while ((bytesRead = in.read(buffer)) > 0) { out.write(buffer, 0, bytesRead); } out.close(); return out.toByteArray(); } finally { connection.disconnect(); } }获取网络使用权限:android.permission.INTERNET
二、后台任务
private class FetchItemsTask extends AsyncTask<Void,Void,ArrayList<GalleryItem>>{ @Override protected ArrayList<GalleryItem> doInBackground(Void... params) { return new FlickrFetchr().fetchItems(); }在主线程使用启动后台任务
new FetchItemsTask().execute();如果Android系统监控服务确认主线程无法响应重要事件,如按下后退键,则应用无响应会发生。
三、创建正确转义的参数化URL
String url= Uri.parse(ENDPOINT).buildUpon().appendQueryParameter("method",METHOD_GET_RECENT) .appendQueryParameter("api_key",API_KEY) .appendQueryParameter(PARAM_EXTRAS,EXTRA_SMALL_URL) .build().toString();四、从后台回到主线程
protected void onPostExecute(ArrayList<GalleryItem> galleryItems) { mItems=galleryItems; setupAdapter(); }该方法在doInBackground()执行完毕之后才会运行,而且是在主线程上运行