这几天试着解决的问题有以下几个:
1)开发Android的时候打开Eclipse ADT将鼠标移到基础类的方法上时,不能显示方法的具体信息,方法解释。起初不知道这是工具Eclipse的问题,还是Android的问题。后来百度后又很多热心而全面的解答,才定位到这原来是Eclipse中关于JavaDoc的设置问题。右击项目-Property-JavaDoc Location,这里可以设置网上的android的javaDoc位置,也可以设置自己用ADT-SDK Manager 下载的android SDK文件夹下/Doc/References的位置,前提是你必须在SDK Manager下载了“Documentation for Android SDK”,这个我认为就是SDK 的API,也就是JavaDoc。这样做以后我的问题就解决了。经过我自己的琢磨,用自己朴素的语言理解就是:JavaDoc就是把SDK API嵌入到工具中,让其在开发中能自动显示。我的开发工具中没有自动显示出来,直接原因是开发工具中JavaDoc的位置设置错误,其实本质是我没有下载API文档。这里也让我又涨了姿势,不需要自己去搜索引擎搜索,只需要使用SDK Manager就能下载Android开发的各种官方资源。
2)Android开发中利用HttpGet或者HttpPost发起网络请求。曾经也在java开发时用过HttpURLConnection,疑惑他们的关系,大概搜了下,没有深入研究,自己理解就是:HttpURLConnection是java原生的网络访问的类,操作比较繁琐但是足够灵活;Http.Client(HttpGet和HttpPost的长辈类)是Android封装了Java中的一些类所开发出的开源框架,使用简单。
现在我开发的问题倒不是上面的问题,而是怎样对请求参数编码转换?HttpGet和HttpPost又是如何对各自的请求参数进行编码转换的?我现在解决问题的方式应该是不求甚解型,就是大概知道为什么这样,但是再追求下去,问到源码之类的,我就不清楚了。至于为什么要对请求编码,是因为在请求中,请求参数中的空格会被转成+,除了数字字母和 . _ - 以外的符号和中文字符会被转正%XX,XX为其十六进制表示。请求方法如下:
GET
HttpClient hc=null;
HttpGet hg=null;
String baseUrl="http://192.168.15.88:8000/api/cms/poi/poisearch.do";
List<BasicNameValuePair> params=new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("name","Lucy"));
params.add(new BasicNameValuePair("grades","89"));
String paramsUrl=URLEncodedUtils.format(params, HTTP.UTF_8);
hg=new HttpGet(baseUrl+paramsUrl);
hc=new DefaultHttpClient();
HttpResponse hr=null;
String result=null;
try {
hr=hc.execute(hg);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(hr.getStatusLine().getStatusCode()==200){
try {
result=EntityUtils.toString(hr.getEntity()); //可以获取字符串,也可以获取字节。这里获取字符串
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
HttpClient hc=null;
HttpGet hg=null;
String baseUrl="http://192.168.15.88:8000/api/cms/poi/poisearch.do";
List<BasicNameValuePair> params=new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("name","Lucy"));
params.add(new BasicNameValuePair("grades","89"));
String paramsUrl=URLEncodedUtils.format(params, HTTP.UTF_8);
hg=new HttpGet(baseUrl+paramsUrl);
hc=new DefaultHttpClient();
HttpResponse hr=null;
String result=null;
try {
hr=hc.execute(hg);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(hr.getStatusLine().getStatusCode()==200){
try {
result=EntityUtils.toString(hr.getEntity()); //可以获取字符串,也可以获取字节。这里获取字符串
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
服务器不要求请求转码的时候也可以不对URL编码,这个时候URL可以直接用字符串拼接的方式得到,即baseUrl=baseUrl+"?name="+name+"&age="+age;
POST
HttpClient hc=null;
HttpPost hp=null;
String baseUrl="http://192.168.15.88:8000/api/cms/poi/poisearch.do";
List<BasicNameValuePair> params=new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("name","Lucy"));
params.add(new BasicNameValuePair("grades","89"));
hp=new HttpPost(baseUrl);
try {
hp.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
hc=new DefaultHttpClient();
HttpResponse hr=null;
String result=null;
try {
hr=hc.execute(hp);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(hr.getStatusLine().getStatusCode()==200){
try {
result=EntityUtils.toString(hr.getEntity());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
HttpClient hc=null;
HttpPost hp=null;
String baseUrl="http://192.168.15.88:8000/api/cms/poi/poisearch.do";
List<BasicNameValuePair> params=new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("name","Lucy"));
params.add(new BasicNameValuePair("grades","89"));
hp=new HttpPost(baseUrl);
try {
hp.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
hc=new DefaultHttpClient();
HttpResponse hr=null;
String result=null;
try {
hr=hc.execute(hp);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(hr.getStatusLine().getStatusCode()==200){
try {
result=EntityUtils.toString(hr.getEntity());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
写的都很粗略,因为暂时开发水平才入门,所以请看官多多指教。