创建IView包
public interface IView {
void showprogress();
void hideprogress();
void onOk(String json);
void onError();
}
创建Model包
public class Model {
public void getdata(String url, final MyOkhttpCallback myOkhttpCallback){
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60*1000, TimeUnit.MILLISECONDS)
.writeTimeout(60*1000, TimeUnit.MILLISECONDS)
.readTimeout(60*1000, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.get()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String message = e.getMessage();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
if (myOkhttpCallback!=null){
myOkhttpCallback.onError(message);
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
if (myOkhttpCallback!=null){
myOkhttpCallback.onOk(string);
}
}
});
}
}
创建controller包
public class controller {
private IView iView;
private Model model;
public controller(IView iView) {
this.iView = iView;
model=new Model();
}
public void getFooddata(){
iView.showprogress();
model.getdata("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1", new MyOkhttpCallback() {
@Override
public void onOk(String json) {
iView.onOk(json);
iView.hideprogress();
}
@Override
public void onError(String message) {
iView.onError();
iView.hideprogress();
}
});
}
}
接口回调
public interface MyOkhttpCallback {
void onOk(String json);
void onError(String message);
}
MainActivity两种写法
第一种
public class Main2Activity extends AppCompatActivity implements Iview1 {
private ProgressDialog dialog;
private TextView ll1;
private controller1 controller1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ll1 = (TextView) findViewById(R.id.ll1);
controller1=new controller1(this);
controller1.getFooddata();
}
@Override
public void showprogress() {
dialog = new ProgressDialog(Main2Activity.this);
dialog.setTitle("正在下载");
dialog.show();
}
@Override
public void hideprogress() {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
}
});
}
@Override
public void onOk(final String json) {
runOnUiThread(new Runnable() {
@Override
public void run() {
ll1.setText(json);
}
});
}
@Override
public void onError() {
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(Main2Activity.this);
builder.setTitle("请检查网络");
builder.show();
}
});
}
}
第二种
先创建一个base包
在base包里写一个BaseActivity继承IView里面重写里面的方法除了获取数据成功外
public abstract class BaseActivity extends AppCompatActivity implements IView {
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layoutId());
initView();
initData();
}
protected abstract void initData();
protected abstract void initView();
protected abstract int layoutId();
@Override
public void showprogress() {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog=new ProgressDialog(BaseActivity.this);
dialog.setTitle("正在加载中");
dialog.show();
}
});
}
@Override
public void hideprogress() {
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
}
});
}
@Override
public void onError() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(BaseActivity.this, "请检查网络", Toast.LENGTH_SHORT).show();
}
});
}
}
在MainActivity里继承在BaseActivity
public class MainActivity extends BaseActivity {
private TextView te;
private controller controller;
@Override
protected void initData() {
controller=new controller(this);
controller.getFooddata();
}
@Override
protected void initView() {
te=findViewById(R.id.te);
}
@Override
protected int layoutId() {
return R.layout.activity_main;
}
@Override
public void onOk(final String json) {
runOnUiThread(new Runnable() {
@Override
public void run() {
te.setText(json);
}
});
}
}