android 使用okhttp 完成post数据的测试

1,总的xml文件

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

2,使用okhttp,utilcode,butternife,fastjson 四个工具

   compile 'com.alibaba:fastjson:1.1.55.android'

    compile 'com.blankj:utilcode:1.9.10'

    compile 'com.jakewharton:butterknife:8.5.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

  compile 'com.squareup.okhttp3:okhttp:3.9.0'

3,新建 Myapplication

public class Myapplication  extends Application{
    public static Context context;

    @SuppressLint("MissingSuperCall")
    @Override
    public void onCreate() {
        context=getApplicationContext();
        Utils.init(this);
    }
    public static Context getContext(){
        return context;
    }
}

4 新建一个界面

public class SuduActivity extends AppCompatActivity {

    @BindView(R.id.input_dataAccount)
    EditText inputDataAccount;
    @BindView(R.id.button_search)
    Button buttonSearch;
    @BindView(R.id.result_correct)
    TextView resultCorrect;
    @BindView(R.id.result_insertdatafail)
    TextView resultInsertdatafail;
    @BindView(R.id.result_nodataback)
    TextView resultNodataback;
    @BindView(R.id.button_finish)
    Button buttonFinish;
    ProgressDialog progressDialog = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sudu);
        ButterKnife.bind(this);
        progressDialog = new ProgressDialog(this);

    }

    @OnClick({R.id.button_search, R.id.button_finish})
    public void onViewClicked(Button button) {
        Map<String, Object> serverStatusMap = new HashMap<String, Object>();
        String httpbaseUrl = "";
        String[] strdata = {"", "", ""};
        switch (button.getId()) {
            case R.id.button_search:
                serverStatusMap.clear();
                serverStatusMap.put("outTr", "123");
         
                httpbaseUrl = "http://123";
                strdata[0] = httpbaseUrl;
                strdata[1] = JSON.toJSONString(serverStatusMap);
                strdata[2] = inputDataAccount.getText().toString().trim();
                if(strdata[2].length()==0){
                    strdata[2] = "100";
                }
                SuduAsyncTask myAsyncTask = new SuduAsyncTask(progressDialog);
                myAsyncTask.execute(strdata);
                myAsyncTask.setOnAsyncResponse(new SuduAsyncResponse() {
                    @Override
                    public void onDataReceivedSuccess(String listData) {
                        Log.d("aa", "onDataReceivedSuccess" + listData);
                        LogUtils.e("sucess");
                        resultCorrect.setText(listData);

                    }

                    @Override
                    public void onDataReceivedFailed(String faildata) {
                        LogUtils.e("关闭程序");
                        resultInsertdatafail.setText("fail" + faildata);
                    }
                });

                break;

            case R.id.button_finish:
                LogUtils.e("关闭程序");
                this.finish();
                break;
        }
    }

    protected void onPause() {
        super.onPause();
        if (progressDialog != null && !this.isFinishing()) {
            progressDialog.dismiss();
        }
    }
}

4,新建异步的类

public class SuduAsyncTask extends AsyncTask<String, Integer, Boolean> {
    HttpUtil httpUtil = null;
    public SuduAsyncResponse asyncResponse;
    ProgressDialog progressDialog = null;
    boolean progressCancelable = false;
    int sucessnum = 0;
    int failnum = 0;
    int totallnum = 0;

    public SuduAsyncTask(ProgressDialog progressDialog1) {
        progressDialog = progressDialog1;
    }

    public void setOnAsyncResponse(SuduAsyncResponse asyncResponse) {
        this.asyncResponse = asyncResponse;

    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        httpUtil = new HttpUtil();

        progressDialog.show();
        progressDialog.setCanceledOnTouchOutside(true);// 设置在点击Dialog外是否取消Dialog进度条
        progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                // TODO Auto-generated method stub
                progressCancelable = true;
            }
        });

    }

    @Override
    protected Boolean doInBackground(String... params) {
        totallnum = Integer.valueOf(params[2]);

        for (int i = 0; i < totallnum; i++) {
            publishProgress(i);
            String httpsResponse = httpUtil.testhttp(params[0], params[1]);
            if(httpsResponse ==null){
                failnum++;

            }else {
                JSONObject jsonObject = JSONObject.parseObject(httpsResponse);
                if (jsonObject.containsKey("isExit")) {
                    int aa = (Integer) jsonObject.get("isExit");
                    if (aa != 0) {
                        failnum++;
                        Log.e("aa", "doInBackground: fail" + failnum);
                    }
                    if (aa == 0) {
                        sucessnum++;
                        Log.e("aa", "doInBackground: sucess" + failnum);
                    }
                }
            }

        }
        return true;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        Log.e("aa", "onProgressUpdate: " + values[0]);
        if (isCancelled()) {
            return;
        }
        progressDialog.setMessage("传输的数目 " + values[0]);
    }


    @Override
    protected void onPostExecute(Boolean result) {
        progressDialog.dismiss();
        if (result) {
            asyncResponse.onDataReceivedSuccess("返回值正确的数据" + sucessnum);//将结果传给回调接口中的函数
            asyncResponse.onDataReceivedFailed("返回值错误的数据" + failnum);
        } else {
            asyncResponse.onDataReceivedFailed("数据失败");
        }

    }
    
}

5 接口

public interface SuduAsyncResponse {
    void onDataReceivedSuccess(String listData);
    void onDataReceivedFailed(String faildata);

}

6,重要的 工具类

package yikatong.com.okhttp3postjson;

import android.content.Context;
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.security.KeyStore;
import java.util.concurrent.TimeUnit;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;



public class HttpUtil {

    private String responseresult = "";
   // private  OkHttpClient okHttpClient =new OkHttpClient();
 //  OkHttpClient okHttpClient =new OkHttpClient();

    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(30 * 1000, TimeUnit.MILLISECONDS)
            .readTimeout(30 * 1000, TimeUnit.MILLISECONDS)
            .writeTimeout(30 * 1000, TimeUnit.MILLISECONDS)
            .build();



    public void HttpUtil() {
        Log.i("hello", "HttpUtil: ");
    }

    public String testhttps(String myurl,String str) {
        responseresult = postjson(myurl, str, Myapplication.getContext());
        Log.e("aa", "第一次服务器返回数据 " + responseresult);
        return responseresult;
//        JSONObject jsonObject= JSONObject.parseObject(responseresult);
//        int aa=(Integer) jsonObject.get("result");
//        Log.e("aa", "testhttps: "+ aa);
    }

    public String testhttp(String myurl,String strjson) {
        responseresult = doPostString(myurl,strjson);
        Log.e("aa", "第一次服务器返回数据 " + responseresult);
        return responseresult;
    }


    private  String doPostString(String myurl,String strjson ) {
        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),strjson);
        Request.Builder builder = new Request.Builder();
        Request request = builder.post(requestBody).url(myurl)
                .build();
       return execute(request);
    }

    private String execute(Request request) {
        //3. 执行Call
        okhttp3.Call call = okHttpClient.newCall(request);
        //4.执行
        //同步执行
        //call.execute();
        try {
            Response response = call.execute();
            final String repo = response.body().string();
            System.err.println("返回的結果的值"+ repo);
            return repo;

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }



}

这是同步传输的方式,记载下来,以后好用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值