Android postデータからサーバ側ツールクラス(postjson文字列、キー値ペアを含む)
12039 ワード
アプリケーション開発では,リンククリックイベントの記録を統計し,アプリケーションを終了するたびに今回の使用アプリケーション中のすべてのイベント記録をサーバにアップロードする必要がある.
まず、イベントをエンティティークラスにカプセル化します.
時間およびIMEIフィールドは、システムによって自動的に割り当てられます.
その後、時間処理クラスを追加します:(ここでは主にイベントの追加であり、イベントリストを必要なjsonフォーマットに変換します)
その後jsonがdoPostにアップロードする方法です
自分の前の誤りはpostメソッドでアップロードするのはkey-value対の形式でアップロードするに違いないが、実際にpostはjsonやxml形式のデータを単独でアップロードすることもでき、そのcontentType属性を指定する必要がある.
httpプロトコルの詳細については、このブログを参照してください.
http://blog.sina.com.cn/s/blog_6040778d01014da3.html
ほぼ正しい方法でpostデータをサーバにpostし、サーバ側が文字列結果を返す場合、方法は次のとおりです.
まず、イベントをエンティティークラスにカプセル化します.
package com.wotlab.home.moneyplantairs.entity;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.Context;
import android.net.sip.SipRegistrationListener;
import android.telephony.TelephonyManager;
public class EventEntity implements Serializable {
private String id;
private String imei;
private String time;
public EventEntity(Context context) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());//
String str = formatter.format(curDate);
this.time = str;
// imei
TelephonyManager tm = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
this.imei=tm.getDeviceId();
}
public String getTime() {
return this.time;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getImei() {
return imei;
}
}
時間およびIMEIフィールドは、システムによって自動的に割り当てられます.
その後、時間処理クラスを追加します:(ここでは主にイベントの追加であり、イベントリストを必要なjsonフォーマットに変換します)
package com.wotlab.home.moneyplantairs.utils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.wotlab.home.moneyplantairs.entity.EventEntity;
/* , json , jsonArray,jsonObject */
public class StasticUtil {
private ArrayList<EventEntity> eventlist = new ArrayList<EventEntity>();
private static StasticUtil instance;
private StasticUtil() {
}
public static StasticUtil getInstance() {
if (instance == null) {
instance = new StasticUtil();
}
return instance;
}
public void addEvent(EventEntity event) {
this.eventlist.add(event);
}
/*
* public ArrayList<EventEntity> getEventlist() { return eventlist; }
*/
/* list json */
public String converToJson() {
JSONArray array = new JSONArray();
for (EventEntity event : this.eventlist) {
JSONObject obj = new JSONObject();
try {
obj.put("id", event.getId());
obj.put("time", event.getTime());
obj.put("imei", event.getImei());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
array.put(obj);
}
System.out.println(array.toString());
return array.toString();
}
}
その後jsonがdoPostにアップロードする方法です
自分の前の誤りはpostメソッドでアップロードするのはkey-value対の形式でアップロードするに違いないが、実際にpostはjsonやxml形式のデータを単独でアップロードすることもでき、そのcontentType属性を指定する必要がある.
public int doPost(String stringUrl, String json) {
String result = null;
HttpPost post = new HttpPost(stringUrl);
HttpResponse httpResponse = null;
try {
StringEntity entity=new StringEntity(json,HTTP.UTF_8);
entity.setContentType("application/json");
//
post.setEntity(entity);
httpResponse = new DefaultHttpClient().execute(post);
return httpResponse.getStatusLine().getStatusCode() ;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
httpプロトコルの詳細については、このブログを参照してください.
http://blog.sina.com.cn/s/blog_6040778d01014da3.html
ほぼ正しい方法でpostデータをサーバにpostし、サーバ側が文字列結果を返す場合、方法は次のとおりです.
public static String postData(String path,List<NameValuePair> list){
try {
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 6000);
HttpConnectionParams.setSoTimeout(params, 6000);
HttpPost httppost = new HttpPost(path);
httppost.setParams(params);
if (list != null) {
httppost.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
}
Log.d("Req", path);
URI uri = httppost.getURI();
System.out.println(uri);
HttpResponse httpResp = new DefaultHttpClient().execute(httppost);
if (httpResp.getStatusLine().getStatusCode() == 200) {
String result = EntityUtils.toString(httpResp.getEntity());
LogUtil.d("Req", result);
return result;
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}