具體模式如圖json
準備工做網絡
抽取Base類ide
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getLayoutId()); initView(); initData(); } protected abstract void initData(); protected abstract void initView(); protected abstract int getLayoutId(); @Override protected void onResume() { super.onResume(); AppUtil.mBaseActivity=this; } }
建立ui
public class AppUtil extends Application { public static BaseActivity mBaseActivity; @Override public void onCreate() { super.onCreate(); } }
首先 別忘了導入依賴this
compile 'com.squareup.okhttp3:okhttp:3.8.1'
而後:開啓碼農模式url
第一步.V層 一個類足以接口
public interface IHomeView { void getstringData(String data); }
第二步.M層固定封裝模式,能夠按自身需求修改ip
1封裝一個成功方法和失敗方法的接口get
public interface NetRequestClickListener { void chenggong(String str); void error(String e); }
2封裝OkHttp單例類string
public class OkhttpUtil { private static OkhttpUtil okhttpUtil; private OkHttpClient okHttpClient; private OkhttpUtil(){ okHttpClient=new OkHttpClient.Builder().build(); } public static OkhttpUtil getInstance(){ if(okhttpUtil==null){ synchronized (OkhttpUtil.class){ if(okhttpUtil==null){ okhttpUtil=new OkhttpUtil(); } } } return okhttpUtil; } public void get(String url, final NetRequestClickListener netRequestClickListener){ Request request = new Request.Builder().url(url).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { final String s = e.toString(); AppUtil.mBaseActivity.runOnUiThread(new Runnable() { @Override public void run() { netRequestClickListener.error(s); } }); } @Override public void onResponse(Call call, Response response) throws IOException { final String string = response.body().string(); // Log.e("TAG",string+"-----------" ); AppUtil.mBaseActivity.runOnUiThread(new Runnable() { @Override public void run() { netRequestClickListener.chenggong(string); } }); } }); } }
3M層調用接口
public interface IHomeModel { void requestData(String url, NetRequestClickListener netRequestClickListener); }
4M實現類
public class HomeModel implements IHomeModel { @Override public void requestData(String url, NetRequestClickListener netRequestClickListener) { OkhttpUtil.getInstance().get(url,netRequestClickListener); } }
第三步.P層實現類(溝通M.V)
public class HomePresenter implements NetRequestClickListener{ IHomeModel iHomeModel; IHomeView iHomeView; public HomePresenter(IHomeView iHomeView){ this.iHomeView=iHomeView; iHomeModel=new HomeModel(); } public void getUrl(String url){ iHomeModel.requestData(url,this); } @Override public void chenggong(String str) { iHomeView.getstringData(str); } @Override public void error(String e) { iHomeView.getstringData(e); } }
視圖層顯示使用
public class MainActivity extends BaseActivity implements IHomeView { private TextView tv; @Override protected int getLayoutId() { return R.layout.activity_main; } @Override protected void initData() { } @Override protected void initView() { tv = (TextView) findViewById(R.id.tv); new HomePresenter(this).getUrl("http://www.ipanda.com/kehuduan/PAGE14501767715521482/index.json"); } @Override public void getstringData(String data) { //具體使用網絡請求回來的數據 Log.e("LAG", "--------------------" + data); } }
不完善,等待更新