Android postデータからサーバ側ツールクラス(postjson文字列、キー値ペアを含む)

12039 ワード

アプリケーション開発では,リンククリックイベントの記録を統計し,アプリケーションを終了するたびに今回の使用アプリケーション中のすべてのイベント記録をサーバにアップロードする必要がある.
まず、イベントをエンティティークラスにカプセル化します.
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 "";

        

        

    }