【J2ME】J2ME里用Post访问WebService -- 使用监听器作回调
来源:互联网 发布:rpm qa grep mysql 编辑:程序博客网 时间:2024/04/28 20:57
首先看一个主要的类:
import java.io.DataInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.microedition.io.Connector;import javax.microedition.io.HttpConnection;import cn.dcbiz.util.Log;public class NetUtil {private static final String TAG = "NetUtil";/** * 进行网络请求,该方法新起了线程。请求前请实现INetCallbackListener监听 * * @param url * 请求的URL * @param key * 参数的键 * @param values * 参数的值,要与key一一对应 * @param lsn * 网络监听器 */public static void execute(final String url, final String[] key,final String[] values, final INetCallbackListener lsn) {new Thread() {public void run() {Log.d(TAG, "请求开始:" + url);lsn.onNetStateChange(INetCallbackListener.STATE_SENDING, "正在发送请求");OutputStream os = null;DataInputStream dis = null;InputStream in = null;HttpConnection conn = null;StringBuffer sb = new StringBuffer();for (int i = 0; i < values.length; i++) {// 构造请求参数sb.append(key[i]);sb.append("=");sb.append(values[i]);sb.append("&");}String body = sb.toString();body = body.substring(0, body.length() - 1);Log.d(TAG, "参数:" + body);try {conn = (HttpConnection) Connector.open(url);conn.setRequestMethod(HttpConnection.POST);conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");// 不设置就出问题conn.setRequestProperty("Content-Length",body.getBytes().length + "");os = conn.openOutputStream();os.write(body.getBytes("utf-8"));int resCode = conn.getResponseCode();Log.d(TAG, "resCode:" + resCode);if (resCode == HttpConnection.HTTP_OK) {in = conn.openInputStream();int len2 = (int) conn.getLength();dis = new DataInputStream(in);byte[] bs = new byte[len2];dis.read(bs);String result = new String(bs, "utf-8");Log.d(TAG, "请求结果:" + result);result = result.substring(result.indexOf("<string>") + 8,result.lastIndexOf('<'));lsn.onNetStateChange(INetCallbackListener.STATE_SENDOVER,result);} else {lsn.onNetStateChange(INetCallbackListener.STATE_SENDERROR, ""+ resCode);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();lsn.onNetStateChange(INetCallbackListener.STATE_SENDERROR,e.getMessage());} finally {try {dis.close();in.close();os.close();conn.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};}.start();}}
说明:public static void execute(final String url, final String[] key, final String[] values, final INetCallbackListener lsn)这个方法是访问WebService的关键方法。
第一个参数是WebService的URL,
第二个参数和第三个参数分别是访问WebService的参数和值,传入时要一一对应,比如访问一个登录接口,要传入:username=denger&password=123456,刚
key = {"username", "password"}; values = {"denger", "123456"};
第三个参数,INetCallbackListener是我写的一个接口,里面只有一个方法,用来做访问结束的回调方法。可以理解为一个监听器,调用都实现它即可。
接口如下:
/** * 网络监听 * * @author Denger * */public interface INetCallbackListener {/** * 正在发送 */public static final int STATE_SENDING = 0;/** * 发送结束,但并代表发布的信息成功,得看返回的代码含意 */public static final int STATE_SENDOVER = 1;/** * 发送出错 */public static final int STATE_SENDERROR = -1;///////////////////////////** * 没有相对应的电话号码 */public static final String MSG_NO_TEL = "-1";/** * 发布成功 */public static final String MSG_PUBLISH_SUC = "true";/** * 当状态改变时的回调 * * @param state * @param msg * 当状态state为{@link #STATE_SENDOVER}时,msg返回Server返回的JSON字符串 */void onNetStateChange(int state, String msg);}
调用都实现上面的接口,就可以根据onNetStateChange方法的回调根据网络状态state的不同来做不同的提示或者事件。
- 【J2ME】J2ME里用Post访问WebService -- 使用监听器作回调
- j2me+webservice
- j2me做webservice小结
- j2me 调用 webservice
- 使用J2me网络编程访问网页内容
- J2ME:rms的事件监听器
- J2ME:rms的事件监听器
- j2me
- j2me
- J2ME
- J2ME
- j2me
- J2ME
- j2me
- j2me
- j2me
- J2ME
- j2me
- reg51.h是什么意思?
- 面向对象计算器
- Hello ExtJs4.1
- Div的min-height适用IE和Firefox
- 监控oracle的运行状况
- 【J2ME】J2ME里用Post访问WebService -- 使用监听器作回调
- Jersey实现JSP页面转发和重定向
- XML:规范的一种标准表示法
- Android 来电铃声为何不能先静音再播放
- jbpm流程设计器-oryx设计器-20120525 BUG修正
- 纯java实现 热度图,自定义颜色风格
- PHP magic_quotes_gpc的详细使用方法
- 知名互联网公司高级搜索开发工程师职位,上海
- 动态变量和静态变量的区别,堆和栈的区别