1.要用到okhttp,权限及配置如下:
<uses-permission android:name="android.permission.INTERNET"/>
compile 'com.squareup.okhttp3:okhttp:3.7.0'
2.网络任务处理类(本来要写一个接口,再继承接口写一个类,这里直接用一个类,便于理解)
public class InternetTask {
private ChuLi chuli; //另一个接口
public InternetTask(ChuLi chuli) { //将主activity传入(主activity实现chuli接口)
this.chuli = chuli;
}
public void startInternet(String ip){
OkHttpClient okhttp = new OkHttpClient();
RequestBody formbody = new FormBody.Builder()
.add("ip", ip)
.build();
final Request request = new Request.Builder()
.url("http://ip.taobao.com/service/getIpInfo.php")
.post(formbody)
.build();
Call call = okhttp.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
chuli.onerror(); //用自己的接口写处理,这样可以在主activity写处理
}
@Override
public void onResponse(Call call, Response response) throws IOException {
chuli.onsuccess(response);
}
});
}
}
3.chuli接口,根据okhttp的不同返回,调用不同的方法
public interface ChuLi {
void onerror();
void onsuccess(Response response);
}
4.主activity 实现 chuli 接口
public class MainActivity extends AppCompatActivity implements ChuLi{ TextView show; Button qq; EditText ipip; InternetTask task; StringBuilder sb = new StringBuilder(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); task = new InternetTask(this); //将chuli的接口传入,这样可以在该activity写返回事件 qq = (Button) findViewById(R.id.qq); show = (TextView) findViewById(R.id.show); ipip = (EditText) findViewById(R.id.ipip); qq.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String ip = ipip.getText().toString(); task.startInternet(ip); //返回事件就在这个aCTIVITY } }); } @Override public void onerror() { //返回事件 runOnUiThread(new Runnable() { @Override public void run() { sb.append("网络超时"+"\n"); show.setText(sb.toString()); } }); } @Override public void onsuccess(final Response response) { //返回事件 runOnUiThread(new Runnable() { @Override public void run() { try { sb.append(response.body().string()).append("\n"); show.setText(sb); } catch (IOException e) { sb.append("请求出错"+"\n"); show.setText(sb); } } }); } }