豆瓣api的电影信息查询app
其实很简单的的app,就是可以根据关键字查询电影,生成一个电影列表,然后点击列表项里面能显示详细介绍。
一,原理
-
使用豆瓣的api,现在是v2版本了,可以从这里查看详细。需要注意的是必须设置
User-Agent
这个请求头,否则返回的就是500错误了。httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22");
-
至于android那边我用的HttpClient,这个很简单的。
String uString= Douban.HOST + "search?q=" + ch + "&start=" + off + "&count=" + Douban.PAGE_SIZE; HttpGet httpGet = new HttpGet(uString); HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, Douban.NET_TIME_OUT); HttpConnectionParams.setSoTimeout(httpParams, Douban.NET_TIME_OUT); httpGet.setParams(httpParams); //X,竟然要模仿浏览器 httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22"); HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = httpclient.execute(httpGet);
-
android3.0以后就不能从主线程中访问网络了,否则就会抛出一个异常
NetworkOnMainThreadException
,而且是RuntimeException
,需要注意,可以用Handler或者是AsyncTask来处理。 -
图片的下载也是,因为图片的下载肯定也是异步的,所以不能在当前网络线程中访问,更不能在主线程里面处理,最好再起一个线程,这里推荐
AsyncTask
。public class ImageLoader extends AsyncTask<Integer, Integer, String> { private ImageView imgView; private String url = null; private Bitmap bm = null; public ImageLoader(ImageView imgView, String url) { super(); this.imgView = imgView; this.url = url; } @Override protected String doInBackground(Integer... arg0) { InputStream is = null; URL aryURI = null; try { aryURI = new URL(url); is = aryURI.openStream(); bm = BitmapFactory.decodeStream(is); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(String result) { this.imgView.setImageBitmap(bm); } }
-
还有很多的不完善之处,比如图片的缓存处理,甚至是JSON数据的缓存处理,还有推出后恢复现场的处理,而且还可以接入douban更多的接口,UI也不是很好看。
-
可以从这里下载。