android网络编程

        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协议的传输,那么跟以上的操作有所不同,
 
 
 
 
 
 
 
 



(未完成)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值