android网络编程

来源:互联网 发布:淘宝怎么设置全场包邮 编辑:程序博客网 时间:2024/06/05 07:04

        android的网络编程以http为主,传输以json为主,服务端以java服务端为主。另外,有使用https或者自定义协议的,传输的也有使用xml的,但是比较少,服务端有使用C#,php等。

        android的框架有很多,可以使用AsyncHttp(https://github.com/loopj/android-async-http/)。如果使用这个框架,那么需要用到HttpCore的包。


        需要注意,HttpClient是一个非常有用的项目,里面包含了,常用的common-logging,http-core,http-mime等,但是这个是java项目,我们需要使用android版本的,这点需要注意。


        如果我们自己使用android自身的类进行编程,那么需要注意,Eclipse中使用的如HttpClient这些类,在android studio中并没有,需要在build.gradle的

android {}中添加
useLibrary 'org.apache.http.legacy'
这个包,其实就在sdk\platforms\android-23\optional\org.apache.http.legacy.jar下。添加了这个包之后,就可以使用httpclient的大多数类了。
    需要注意,http协议有一个header头,这个头里面存储这传输什么的信息,而http除了url之外,本身是可以传输信息的,使用entity传输。下面是常规的代码:
package com.seatel.mobilehall.net;import android.util.Log;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicHeader;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URI;import java.net.URISyntaxException;/** * Created by han on 2016/1/27. */public class HttpTool {    public String post(String url,JSONObject json) {        String result = null;        HttpClient client = new DefaultHttpClient();        try {            HttpPost post = new HttpPost(new URI(url));            post.setHeader("Content-Type", "application/json");            StringEntity entity = new StringEntity(json.toString(),"utf-8");            entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));            post.setEntity(entity);            HttpResponse httpResponse = client.execute(post);            InputStream inStream = httpResponse.getEntity().getContent();            BufferedReader reader = new BufferedReader(new InputStreamReader(inStream,"utf-8"));            StringBuilder strber = new StringBuilder();            String line = null;            while ((line = reader.readLine()) != null) {                strber.append(line);                result = strber.toString();            }        } catch (URISyntaxException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return result;    }}

package com.seatel.mobilehall.net;import android.content.Context;import android.os.AsyncTask;import android.util.Log;import com.seatel.mobilehall.app.MainActivity;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/** * Created by han on 2016/1/27. */public class HttpTask extends AsyncTask<Void, Void, Boolean> {    private String result;    private Context context;    public HttpTask(Context context) {        this.context = context;    }    @Override    protected Boolean doInBackground(Void... params) {        try {            JSONObject json = new JSONObject();            json.put("cmd", "advert");            result = new HttpTool().post("http://120.24.49.116:8080/rqInvokeController", json);        } catch (JSONException e) {            e.printStackTrace();        }        return null;    }    @Override    protected void onPreExecute() {    }    @Override    protected void onPostExecute(Boolean aBoolean) {        try {            JSONObject response = new JSONObject(result);            String code = response.optString("code");            if(code.equals("0")){                JSONArray array = response.optJSONArray("list");                JSONObject obj1 = array.getJSONObject(0);                JSONObject obj2 = array.getJSONObject(1);                String image1 = obj1.optString("image");                String image2 = obj2.optString("image");                MainActivity activity = (MainActivity) context;                activity.imageDisplay(image1);            }        } catch (JSONException e) {            e.printStackTrace();        }    }}

以上是常规的http传输json的网络操作。传输的格式如下:
http://120.24.49.116:8080/rqInvokeController{"cmd":"advert"}
分别为url和entity。
    如果我们需要传输其他类型的格式,这个时候就用到了httpmime,这点从
HttpPost post = new HttpPost(new URI(url));            post.setHeader("Content-Type", "application/json");
声明中知道,上面传输的事json。因此若需要其他格式就需要mime协议,从这个协议的名字可以看出,他其实是在header中声明添加的格式,并且在entity中添加需要的数据entity。对于mime协议中的multiple,在httpmime中,体现为MultipartEntity类,HttpClient.addEntity()方法添加MultipartEntity。
   httpmime的详细操作
(未完成)
   而如果是https协议的传输,那么跟以上的操作有所不同,



(未完成)



0 0
原创粉丝点击