zoukankan      html  css  js  c++  java
  • Android架构: MVC 新浪微博

    由于项目的需要,最近研究了一下需要连接网络项目的MVC架构,参考了一下一个新浪微博的开发架构

    http://www.open-open.com/lib/view/open1345524526767.html

    大体描述如下

    需求:项目中接口很多,联网操作在Activity中处理会非常浩大且那一维护

    解决方案:将数据提供层和表现层分开,数据层请求接口的数据 , Activity只处理从数据层来的数据,

    那我们看一下Activity的实现:

    首先定义了一个接口用于规范将来的activty中的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package com.testaijialogic;
     
    public interface IAijiaActivity {
     
        void init();// 初始化数据
     
        void initView();// 初始化界面控件
     
        void refresh(Object... param);// 刷新 内容 不知道可变参数的可以再去学习下coreJva
     
    }


    然后是Activity

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    package com.testaijialogic;
     
    /**
     * MVC
     * M 提供数据
     * V 显示给用户
     * C 把M的数据显示到视图
     */
    import java.util.HashMap;
    import java.util.List;
     
    import com.testaijialogic.domain.PersonEntity;
    import com.testaijialogic.widget.PersonAdapter;
     
    import android.app.Activity;
    import android.app.ProgressDialog;
     
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ListView;
     
    public class TestAijiaLogicActivity extends Activity implements IAijiaActivity {
        private Context context;
        private ListView listView;
        private ProgressDialog progressDialog;
        private Button button;
        private ListView listView2;
     
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            context = TestAijiaLogicActivity.this;
            Intent intent = new Intent("com.testaijialogic.MainService");// 在首个Activity开启服务
            startService(intent);
            initView();
            init();
            Log.i("Create""=====");
     
        }
     
        protected void onPause() {
     
            super.onPause();
            Log.i("onPause""=====");
        }
     
        protected void onResume() {
     
            super.onResume();
            Log.i("onResume""=====");
        }
     
        protected void onDestroy() {
     
            super.onDestroy();
            android.os.Process.killProcess(android.os.Process.myPid());
     
        }
     
        @Override
        public void init() {// 初始化list的数据
            @SuppressWarnings("rawtypes")
            HashMap param = new HashMap();
            param.put("product""testTask");
            // 加载搜索页面微博信息的任务
            MainService.addActivity(TestAijiaLogicActivity.this);
            Task task = new Task(Task.GETPRODUCT, param, context);
            MainService.newTask(task);// 添加新任务
            progressDialog.show();
     
        }
     
        @Override
        public void refresh(Object... param) {
            @SuppressWarnings("unchecked")
            HashMap map = (HashMap) param[0];// 获取map的数据
     
            List<PersonEntity> personlist = (List<PersonEntity>) map.get("product");
            PersonAdapter personAdapter = new PersonAdapter(context, personlist);
            listView.setAdapter(personAdapter);
     
            List<PersonEntity> subpersonlist = (List<PersonEntity>) map// 加载第二个listview
                    .get("subproduct");
            PersonAdapter subpersonAdapter = new PersonAdapter(context,
                    subpersonlist);
            listView2.setAdapter(subpersonAdapter);
            progressDialog.dismiss();
            Log.i("测试""setadapter");
     
        }
     
        public void initView() {
            listView = (ListView) findViewById(R.id.listView1);
            listView2 = (ListView) findViewById(R.id.listView2);
            button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
     
                @Override
                public void onClick(View v) {
                    init();
                }
            });
            progressDialog = new ProgressDialog(this);
            progressDialog.setMessage("正在获取数据");
     
        }
    }


    可以看到,表现层只是把数据展示到xml中,没有牵扯到请求接口

    下面是数据请求层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package com.testaijialogic;
    /**
     * 任务实体,由于储存认为信息
     */
    import java.util.HashMap;
     
    import android.content.Context;
     
    public class Task {
     
        public static final int GETPRODUCT = 1;
        public static final int GETPRODUCT2 = 5;
        public static final int MSGACTIVITY = 4;
        public static final int NEWWEIBO = 7;
        public static final int HOMEREFRESH = 3;
        public static final int VIEWWEIBO = 8;
        private int taskId;
        private HashMap taskParams;
        private Context ctx;
     
        public Task(int taskId, HashMap taskParams, Context ctx) {
            super();
            this.taskId = taskId;
            this.taskParams = taskParams;
            this.ctx = ctx; 
        }
     
        public int getTaskId() {
            return taskId;
        }
     
        public void setTaskId(int taskId) {
            this.taskId = taskId;
        }
     
        public HashMap getTaskParams() {
            return taskParams;
        }
     
        public void setTaskParams(HashMap taskParams) {
            this.taskParams = taskParams;
        }
     
        public Context getCtx() {
            return ctx;
        }
     
        public void setCtx(Context ctx) {
            this.ctx = ctx;
        }
    }


    Person实体,储存人员信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package com.testaijialogic.domain;
     
    public class PersonEntity {
        // {"amount":100,"id":1,"name":"itcastliming"}
        private int id;
        private String name;
        private String amount;
     
        public PersonEntity(int id, String name, String amount) {
            setId(id);
            setAmount(amount);
            setName(name);
        }
     
        /**
         * @return the id
         */
        public int getId() {
            return id;
        }
     
        /**
         * @param id
         *            the id to set
         */
        public void setId(int id) {
            this.id = id;
        }
     
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
     
        /**
         * @param name
         *            the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
     
        /**
         * @return the amount
         */
        public String getAmount() {
            return amount;
        }
     
        /**
         * @param amount
         *            the amount to set
         */
        public void setAmount(String amount) {
            this.amount = amount;
        }
     
    }


    核心网络服务,请求项目的所有接口数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    package com.testaijialogic;
     
    /*
     * 获取服务器信息服务
     *  */
     
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
     
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import com.testaijialogic.domain.PersonEntity;
    import com.testaijialogic.util.WebSender;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Service;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Handler;
    import android.os.IBinder;
    import android.os.Message;
    import android.util.Log;
     
    public class MainService extends Service implements Runnable {
     
        private static ArrayList<IAijiaActivity> allActivity = new ArrayList<IAijiaActivity>();
        private static ArrayList<Task> allTasks = new ArrayList<Task>();
        List<String> p = new ArrayList<String>();// post的参数 注意设置成全局变量后只能一次放松一个Post了
        List<String> v = new ArrayList<String>();// post的数值
        public static boolean isRun = false;
     
        public static void newTask(Task t) {
            allTasks.add(t);
        }
     
        public static void addActivity(IAijiaActivity iw) {
            allActivity.add(iw);
        }
     
        public static void removeActivity(IAijiaActivity iw) {
            allActivity.remove(iw);
        }
     
        public static IAijiaActivity getActivityByName(String name) {
            for (IAijiaActivity iw : allActivity) {
                if (iw.getClass().getName().indexOf(name) >= 0) {
                    return iw;
                }
            }
            return null;
        }
     
        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
     
            isRun = true;
            new Thread(this).start();
            Log.e("=============================", "MainService    onCreate()");
        }
     
        @Override
        public void onDestroy() {
            isRun = false;
            stopSelf();
            super.onDestroy();
     
        }
     
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while (isRun) {
                try {
                    if (allTasks.size() > 0) {
                        // 执行任务,可以遍历执行多个任务
                        // doTask(allTasks.get(0));
                        for (Task task : allTasks) {
                            doTask(task);
                        }
     
                    } else {
                        try {
                            Thread.sleep(1000);
                        } catch (Exception e) {
                        }
     
                    }
                } catch (Exception e) {
                    if (allTasks.size() > 0)
                        allTasks.remove(allTasks.get(0));
                    Log.d("error", "------------------" + e);
                }
            }
        }
     
        private Handler handler = new Handler() {
     
            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                super.handleMessage(msg);
     
                switch (msg.what) {
                case Task.GETPRODUCT:
                    MainService.getActivityByName("TestAijiaLogicActivity")
                            .refresh(msg.obj);// 调用TestAijiaLogicActivity的方法刷新控件
     
                    break;
                case Task.GETPRODUCT2:// 个人资料
     
                    break;
                case Task.MSGACTIVITY:
     
                    break;
                case Task.NEWWEIBO:
     
                    break;
                case Task.VIEWWEIBO:
     
                    break;
                default:
                    break;
                }
            }
     
        };
     
        @SuppressWarnings("unchecked")
        private void doTask(Task task) throws JSONException {
            // TODO Auto-generated method stub
            Message msg = handler.obtainMessage();
            msg.what = task.getTaskId();
     
            switch (task.getTaskId()) {
            case Task.GETPRODUCT:// 获取产品信息
                Log.i("有任务执行", "MainS" + task.getTaskId());
                String urlStr = "http://10.1.49.230/test/testjson.php";
                p.add("product");// 增加post的参数名
                v.add((String) task.getTaskParams().get("product"));// 增加post的参数的值
                String result = WebSender.httpClientSendPost(urlStr, p, v);// 发送httppost请求
     
                List<PersonEntity> personEntities = new ArrayList<PersonEntity>();
                JSONArray jsonArray = new JSONArray(result);
                for (int i = 0; i < jsonArray.length(); i++) {
     
                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    PersonEntity personEntity = new PersonEntity(
                            jsonObject.getInt("id"), jsonObject.getString("name"),
                            jsonObject.getString("amount"));
                    personEntities.add(personEntity);
     
                }
                /**
                 * 第二次请求联网,返回list , 也可以使用多任务处理,但是当前项目中界面的listview特别多所以使用这样
                 */
                String suburlStr = "http://10.1.49.230/test/testsubjson.php";
                p.add("product");// 增加post的参数名
                v.add((String) task.getTaskParams().get("product"));// 增加post的参数的值
                String subresult = WebSender.httpClientSendPost(suburlStr, p, v);// 发送httppost请求
     
                List<PersonEntity> subpersonEntities = new ArrayList<PersonEntity>();
                JSONArray subjsonArray = new JSONArray(subresult);
                for (int i = 0; i < jsonArray.length(); i++) {
     
                    JSONObject jsonObject = subjsonArray.getJSONObject(i);
                    PersonEntity personEntity = new PersonEntity(
                            jsonObject.getInt("id"), jsonObject.getString("name"),
                            jsonObject.getString("amount"));
                    subpersonEntities.add(personEntity);
     
                }
     
                @SuppressWarnings("rawtypes")
                HashMap map = new HashMap();
                map.put("product", personEntities);
                map.put("subproduct", subpersonEntities);
                msg.obj = map;
                // msg.obj = personEntities;//如果只需要一个list那用这个就可以
                break;
     
            default:
                break;
            }
            allTasks.remove(task);
            // 通知主线程更新UI
            handler.sendMessage(msg);
        }
     
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
     
        /**
         * 退出应用程序
         *
         * @param context
         */
        public static void exitAPP(Context context) {
            Intent it = new Intent("weibo4android.logic.util.MainService");
            context.stopService(it);// 停止服务
            // 杀死进程 我感觉这种方式最直接了当
            android.os.Process.killProcess(android.os.Process.myPid());
     
        }
     
        public static void finshall() {
     
            for (IAijiaActivity activity : allActivity) {// 遍历所有activity 一个一个删除
                ((Activity) activity).finish();
            }
        }
     
        /**
         * 网络连接异常
         *
         * @param context
         */
        public static void AlertNetError(final Context context) {
            AlertDialog.Builder alerError = new AlertDialog.Builder(context);
            alerError.setTitle("网络错误");
            alerError.setMessage("请检查网络");
            alerError.setNegativeButton("退出"new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    exitAPP(context);
                }
            });
            alerError.setPositiveButton("确定"new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                    context.startActivity(new Intent(
                            android.provider.Settings.ACTION_WIRELESS_SETTINGS));
                }
            });
            alerError.create().show();
        }
     
    }

    网络工具类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    package com.testaijialogic.util;
     
    /**
     *网络通信类(已优化)
     * */
     
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.ResponseHandler;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.BasicResponseHandler;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
     
    import android.util.Log;
     
    public class WebSender {
     
        /*
         * 比较原始的 POST Cookies
         */
        public static String[] sendPost(String urlStr, String[] param,
                String[] value, String cookies) {
            String[] result = { "", "" };
            String paramValue = "";
            StringBuffer buffer = null;
            HttpURLConnection con = null;
     
            try {
                URL url = new URL(urlStr);
                con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("POST");
                con.setRequestProperty("Connection", "Keep-Alive");
                con.setRequestProperty("Charset", "UTF-8");
                // con.setRequestProperty("Content-Type", "text/html");
     
                // set cookies
                if (QHFlag.isNotEmpty(cookies)) {
                    con.setRequestProperty("cookie", cookies);
                }
     
                paramValue = WebSender.getParamStr(param, value);
     
                con.setDoOutput(true);
                con.setDoInput(true);
                con.setUseCaches(false);
                con.setConnectTimeout(50000);// 设置连接主机超时(单位:毫秒)
                con.setReadTimeout(50000);// 设置从主机读取数据超时(单位:毫秒)
     
                con.connect();// connect open
     
                PrintWriter out = new PrintWriter(con.getOutputStream());// 发送数据
                out.print(paramValue);
                out.flush();
                out.close();
     
                // get cookies
                String cks = con.getHeaderField("set-cookie");
                if (cks != "" && cks != null)
                    result[1] = cks;
     
                // get status
                int res = 0;
                res = con.getResponseCode();
     
                // get info response
                if (res == 200 || res == 302) {
                    BufferedReader in = new BufferedReader(new InputStreamReader(
                            con.getInputStream(), "UTF-8"));
                    buffer = new StringBuffer();
                    String line = "";
                    while ((line = in.readLine()) != null) {
                        buffer.append(line);
                    }
                } else {
                    QHFlag.e("Web Response:" + res);
                }
     
                con.disconnect();// Connect Close!
            } catch (Exception e) {
                // e.printStackTrace();
            }
     
            if (buffer.length() != 0 && buffer != null) {
                result[0] = buffer.toString();
            }
            return result;
        }
     
        /*
         * 使用HttpClient对象发送GET请求
         */
        public static String httpClientSendGet(String webUrl) {
            String content = null;
            // DefaultHttpClient
            DefaultHttpClient httpclient = new DefaultHttpClient();
            // HttpGet
            HttpGet httpget = new HttpGet(webUrl);
            // ResponseHandler
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            try {
                content = httpclient.execute(httpget, responseHandler);
            } catch (Exception e) {
                e.printStackTrace();
            }
            httpclient.getConnectionManager().shutdown();
            return content;
        }
     
        /*
         * 使用HttpClient对象发送有cookie的GET请求
         */
        public static String httpClientSendGet(String urlStr, String Cookies) {
            String httpUrl = urlStr;
            HttpGet httpGet = new HttpGet(httpUrl);
            try {
                HttpClient httpClient = new DefaultHttpClient();
                httpGet.setHeader("cookie", Cookies);
                // 请求HttpClient,取得HttpResponse
                HttpResponse httpResponse = httpClient.execute(httpGet);
     
                // 请求成功
                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    // 取得返回的字符串
                    String strResult = EntityUtils.toString(httpResponse
                            .getEntity());
                    return strResult;
                }
            } catch (Exception e) {
            }
            return "0";
        }
     
        /*
         * 使用HttpClient对象发送POST请求
         */
        public static String httpClientSendPost(String urlStr,
                List<String> paraName, List<String> val) {
            String httpUrl = urlStr;
            // HttpPost对象
            HttpPost httpPost = new HttpPost(httpUrl);
     
            // 使用NameValuePair来保存要传递的Post参数
            List<NameValuePair> params = new ArrayList<NameValuePair>();
     
            // 添加要传递的参数
            System.out.println("====================================");
            for (int i = 0; i < paraName.size(); i++) {
                params.add(new BasicNameValuePair(paraName.get(i), val.get(i)));
                System.out.println(paraName.get(i) + "->" + val.get(i));
            }
            System.out.println("====================================");
     
            try {
                // 设置字符集
                HttpEntity httpEntity = new UrlEncodedFormEntity(params, "utf-8");
                httpPost.setEntity(httpEntity);
     
                // httpClient对象
                HttpClient httpClient = new DefaultHttpClient();
     
                // 请求HttpClient,取得HttpResponse
                HttpResponse httpResponse = httpClient.execute(httpPost);
     
                // 请求成功
                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    // 取得返回的字符串
                    String strResult = EntityUtils.toString(httpResponse
                            .getEntity());
                    System.out.println(strResult);
                    return strResult;
                }
            } catch (Exception e) {
            }
            return "";
        }
     
        /*
         * 使用HttpClient对象发送POST请求
         */
        public static String httpClientSendPost(String urlStr,
                List<String> paraName, List<String> val, String Cookies) {
            String httpUrl = urlStr;
            // HttpPost对象
            HttpPost httpPost = new HttpPost(httpUrl);
     
            // 使用NameValuePair来保存要传递的Post参数
            List<NameValuePair> params = new ArrayList<NameValuePair>();
     
            // 添加要传递的参数
            System.out.println("====================================");
            for (int i = 0; i < paraName.size(); i++) {
                params.add(new BasicNameValuePair(paraName.get(i), val.get(i)));
                System.out.println(paraName.get(i) + "->" + val.get(i));
            }
            System.out.println("====================================");
     
            try {
                // 设置字符集
                HttpEntity httpEntity = new UrlEncodedFormEntity(params, "utf-8");
                httpPost.setEntity(httpEntity);
                httpPost.setHeader("cookie", Cookies);
                // httpClient对象
                HttpClient httpClient = new DefaultHttpClient();
     
                // 请求HttpClient,取得HttpResponse
                HttpResponse httpResponse = httpClient.execute(httpPost);
     
                // 请求成功
                if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    // 取得返回的字符串
                    String strResult = EntityUtils.toString(httpResponse
                            .getEntity());
                    System.out.println(strResult);
                    return strResult;
                }
            } catch (Exception e) {
            }
            return "";
        }
     
        public static String uploadBitmap1(String urlString, byte[] imageBytes,
                String cookie) {
            // String boundary = "*****";
            try {
                URL url = new URL(urlString);
                final HttpURLConnection con = (HttpURLConnection) url
                        .openConnection();
                // 允许input、Output,不使用Cache
                con.setDoInput(true);
                con.setDoOutput(true);
                con.setUseCaches(false);
     
                // 设置传送的method=POST
                con.setRequestMethod("POST");
                // setRequestProperty
                con.setRequestProperty("Connection", "Keep-Alive");
                con.setRequestProperty("Charset", "UTF-8");
                con.setRequestProperty("Content-Type", "text/html");
                if (cookie != null && cookie != "") {
                    Log.i("myEvent", "send cookies value is:" + cookie);
                    con.setRequestProperty("cookie", cookie);
                }
                // 从主机读取数据的超时时间(单位:毫秒)
                con.setReadTimeout(50000);
                // 设置连接主机的超时时间(单位:毫秒)
                con.setConnectTimeout(50000);
                // System.out.println(con.getResponseCode());
                // 设置DataOutputStream
                DataOutputStream dsDataOutputStream = new DataOutputStream(
                        con.getOutputStream());
                // dsDataOutputStream.writeBytes(twoHyphen + boundary + endString);
                // dsDataOutputStream.writeBytes("Content-Disposition:form-data;"
                // + "name="file1";filename="" + "11.jpg"" + endString);
                // dsDataOutputStream.writeBytes(endString);
     
                dsDataOutputStream.write(imageBytes, 0, imageBytes.length);
                // dsDataOutputStream.writeBytes(endString);
                // dsDataOutputStream.writeBytes(twoHyphen + boundary + twoHyphen
                // + endString);
                dsDataOutputStream.close();
                int cah = con.getResponseCode();
                if (cah == 200) {
                    InputStream isInputStream = con.getInputStream();
                    int ch;
                    StringBuffer buffer = new StringBuffer();
                    while ((ch = isInputStream.read()) != -1) {
                        buffer.append((char) ch);
                    }
                    return buffer.toString();
                } else {
                    return "false";
                }
            } catch (Exception e) {
                e.printStackTrace();
                return "false";
            }
     
        }
     
        /**
         * 请求字符串
         * */
        public static String getParamStr(String[] param, String[] value) {
            String res = "";
            if (param.length == value.length) {
                for (int i = 0; i < param.length; i++) {
                    res += param[i] + "=" + toUTF8(value[i]) + "&";
                }
            }
            return res.substring(0, res.length() - 1);
        }
     
        public static String toUTF8(String str) {
            String u = str;
            try {
                u = java.net.URLEncoder.encode(u, "UTF-8");
            catch (Exception e) {
     
            }
            return u;
        }
     
    }

     

    齊帥
  • 相关阅读:
    Spring Boot 定时+多线程执行
    Spring Boot + Vue Element实现Excel文件上传、解析、下载(含完整实现过程)
    立个flag,2020年比2019年产出提升10倍
    《Google工作法》读书笔记
    学习Go语言(二)快速入门
    学习Go语言(一)环境安装及HelloWorld
    WPF 自定义控件缩放
    上、下位机软件通信时,结构体的内存对齐问题
    C 语言能不能在头文件定义全局变量?
    注释格式
  • 原文地址:https://www.cnblogs.com/qishuai/p/4443940.html
Copyright © 2011-2022 走看看