最近好久没有写博客了,因为上班的原因。今天想做一个点餐系统,移动版和服务器版。数据使用json数据进行传输。但是碰见一个难题就是如何让移动端将数据传输给服务器,然后进行更新到数据库。进入正题:
因为我使用的是httpurlconnection,大家都知道get请求的参数是放在url后面以?开头&分割。但是如果我们参数多或者是参数不想让别人知道的时候我们就要使用post,因为他的参数是放在相应头里面的,get传输数据很简单就不讲了,最主要是post传参数,因为我在这里遇见过几个坑,其实不难,主要是一些小细节我们会不注意。
传参数的代码:
URL u=new URL(url);
String param="pw="+URLEncoder.encode("丁丁","UTF-8");
HttpURLConnection h=(HttpURLConnection) u.openConnection();
h.setDoInput(true);
h.setDoOutput(true);
h.setRequestMethod("POST");
h.setRequestProperty("Connection", "Keep-Alive");
h.setRequestProperty("Charset", "UTF-8");
h.connect();
//建立输入流,向指向的URL传入参数
DataOutputStream dos=new DataOutputStream(h.getOutputStream());
dos.writeBytes(param);
dos.flush();
dos.close();
你会发现其实我们就是用这个上传参数的,这里面的各个意思就不需要介绍了吧,你以为这样就可以了,事实上不行,我们发现tomcat不会打印“丁丁”这个值。但是我们的代码没错啊,也执行完了,开始我还以为是接口的问题,可是换get为什么就没问题呢,所以我觉得应该是我们自己的问题,后来我就一行行代码的去试,发现没问题。我就加了几行:
int resultCode=h.getResponseCode();
if(HttpURLConnection.HTTP_OK==resultCode){
StringBuffer sb=new StringBuffer();
String readLine=new String();
BufferedReader responseReader=new BufferedReader(new InputStreamReader(h.getInputStream(),"UTF-8"));
while((readLine=responseReader.readLine())!=null){
sb.append(readLine).append("\n");
}
responseReader.close();
Log.d("haha", sb.toString());
这下发现有用了,当然我就一行行去注释执行,后来发现,只要加上上面这行代码就可以执行
int resultCode=h.getResponseCode();
只要在传输完后加上这句就能传参数,tomacat就能打印出值。至于原因我也不是太清楚。就是因为少加了这个,害我都搞不出来,都快崩溃了。后来就是这一行就有用了。可能有的人也碰见过坑,希望对大家有用