【J 2 ME】J 2 MEではPostでWebServiceにアクセス--Listenerでコールバック
まず、主なクラスを見てみましょう.
説明:public static void execute(final String url,final String[]key,final String[]values,final INetCallback Listener lsn)この方法はWebServiceにアクセスする重要な方法です.
最初のパラメータはWebServiceのURLで、
2番目のパラメータと3番目のパラメータは、WebServiceにアクセスするパラメータと値です.入力時には、ログインインタフェースにアクセスするなど、1つずつ対応します.入力:username=denger&password=123456、剛
key = {"username", "password"}; values = {"denger", "123456"};
3番目のパラメータ、INetCallbackListenerは私が書いたインタフェースで、アクセス終了のコールバック方法をする方法は1つしかありません.リスナーとして理解でき、呼び出しはすべて実現すればよい.
インタフェースは次のとおりです.
呼び出しはすべて上記のインタフェースを実現し,onNetStateChangeメソッドのコールバックに基づいてネットワーク状態stateによって異なるヒントやイベントを行うことができる.
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 block
e.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 block
e.printStackTrace();
}
}
};
}.start();
}
}
説明:public static void execute(final String url,final String[]key,final String[]values,final INetCallback Listener lsn)この方法はWebServiceにアクセスする重要な方法です.
最初のパラメータはWebServiceのURLで、
2番目のパラメータと3番目のパラメータは、WebServiceにアクセスするパラメータと値です.入力時には、ログインインタフェースにアクセスするなど、1つずつ対応します.入力:username=denger&password=123456、剛
key = {"username", "password"}; values = {"denger", "123456"};
3番目のパラメータ、INetCallbackListenerは私が書いたインタフェースで、アクセス終了のコールバック方法をする方法は1つしかありません.リスナーとして理解でき、呼び出しはすべて実現すればよい.
インタフェースは次のとおりです.
/**
*
*
* @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によって異なるヒントやイベントを行うことができる.