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;
}
}
这是同步传输的方式,记载下来,以后好用