weekone

依赖

//Butterknfie
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    //
    implementation "com.squareup.okhttp3:okhttp:3.12.0"
    implementation 'com.squareup.okhttp3:okhttp:3.7.0'
    implementation 'com.squareup.okio:okio:1.12.0'
    //
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    //
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    //Gson解析
    implementation 'com.google.code.gson:gson:2.8.1'
    //banner
    implementation 'com.github.pinguo-zhouwei:MZBannerView:v2.0.2'
    //导入Design包
    implementation 'com.android.support:design:28.+'
    //SmartRefreshLayout
    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-19'
    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-19'
    //RecyclerView适配器
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'

okHttp 封装


public class OkHttpUtils<T> {
    private final OkHttpClient okHttpClient;

    private  OkHttpUtils(){
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(new LogInterceptor())
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .build();
    }

    public static OkHttpUtils getHttpUtilsInstance(){
        return HttpUtilsInstance.okHttpUtils;
    }

    private static class HttpUtilsInstance{
        public static OkHttpUtils okHttpUtils = new OkHttpUtils();
    }
    //get
    public void getData(String path, final Class<T> aClass){

        final Request request = new Request.Builder().url(path).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                backData.onFail(e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                String string = response.body().string();
                Gson gson = new Gson();
                T t = gson.fromJson(string, aClass);
                Message message = handler.obtainMessage();
                message.obj = t;
                handler.sendMessage(message);
            }
        });

    }

    //post
    public void postData(String path, HashMap<String,String> hashMap, final Class<T> aClass){
        FormBody.Builder builder = new FormBody.Builder();
        for (String key : hashMap.keySet()) {
            builder.add(key,hashMap.get(key));
        }
        FormBody formBody = builder.build();

        Request request = new Request.Builder()
                .url(path)
                .post(formBody)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                backData.onFail(e.getMessage());
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                Gson gson = new Gson();
                T t = gson.fromJson(string, aClass);
                Message message = handler.obtainMessage();
                message.obj = t;
                handler.sendMessage(message);
            }
        });
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            T t = (T) msg.obj;
            backData.onResponse(t);
        }
    };


    CallBackData backData;
    public void setCallBackData(CallBackData backData){
        this.backData = backData;
    }

    //接口回调
    public interface CallBackData<D>{
        void onResponse(D d);
        void onFail(String massage);
    }

}

拦截器log

public class LogInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        //打印所需信息
        logPrint(request);
        Response response = chain.proceed(request);
        //打印所需信息
        logPrint(request);
        return response;
    }

    private void logPrint(Request request) {
        Log.e("LogInterceptor", "request:" + request);
        Log.e("LogInterceptor", "System.nanoTime():" + System.nanoTime());
        Log.e("LogInterceptor", request.method());
    }

}

pppp层

//base
public class BasePresenter<V extends IBaseView> {
    private V mView;
    public void setView(V v){
        this.mView = v;
    }

    public void detachData(){
        this.mView = null;
    }

    public V getView(){
        return mView;
    }

}

//

public class ShopPresenter extends BasePresenter<IShopView> {

    private final OkHttpUtils okHttpUtils;

    public ShopPresenter(){
        //获取M层
        okHttpUtils = OkHttpUtils.getInstance();

        okHttpUtils.setCallBackData(new OkHttpUtils.CallBackData<NewsBean>() {
            @Override
            public void onFailure(String message) {
                getView().onFild(message);
            }

            @Override
            public void onResponse(NewsBean bean) {
                getView().onSuccess(bean);
            }
        });

    }

    public void getMianData(String loginUrl, Class<NewsBean> loginBeanClass) {
        okHttpUtils.getData(loginUrl,loginBeanClass);
    }
}

//vvv层

//   IView
public interface IMainView extends IBaseView {

    void onSuccess(LoginBean bean);
    void onFild(String message);

}

//登录

public class MainActivity extends AppCompatActivity implements IMainView {
    @BindView(R.id.login_phone)
    EditText loginPhone;
    @BindView(R.id.login_pwd)
    EditText loginPwd;
    @BindView(R.id.login_dl)
    Button loginDl;
    @BindView(R.id.login_zc)
    Button loginZc;
    private MainPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        initData();
    }


    public void initData() {
        //获取P层
        presenter = new MainPresenter();
        //关联
        presenter.setView(this);
    }


    @Override
    public void onSuccess(LoginBean bean) {
        String message = bean.getMessage();
        String status = bean.getStatus();
        if(status.equals("0000")){
            Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(MainActivity.this, ShowActivity.class);
            startActivity(intent);
        }


    }

    @Override
    public void onFild(final String message) {
        Log.e("onFild", Thread.currentThread().getName());
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.e("onFild", message);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detachData();
    }

    @OnClick({R.id.login_dl, R.id.login_zc})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.login_dl:
                String phone = loginPhone.getText().toString();
                String pwd = loginPwd.getText().toString();
                if(phone.equals("")||pwd.equals("")){
                    Toast.makeText(this, "账号或密码不可为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                presenter.getMianData(UrlBean.LOGIN_URL,phone,pwd,LoginBean.class);
                break;
            case R.id.login_zc:
                Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
                startActivity(intent);
                break;
        }
    }
}

//展示
public class ShowActivity extends AppCompatActivity implements IShopView {

    @BindView(R.id.recyclerView)
    RecyclerView recyclerView;
    private ShopPresenter presenter;

    private Context context;
    private NewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        ButterKnife.bind(this);
        context = this;
        initData();
    }

    private void initData() {

        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(staggeredGridLayoutManager);
        adapter = new NewAdapter(context);
        recyclerView.setAdapter(adapter);
        //
        presenter = new ShopPresenter();
        presenter.setView(this);

        presenter.getMianData(UrlBean.PATH,NewsBean.class);



    }

    @Override
    public void onSuccess(NewsBean bean) {
        List<NewsBean.DataBean> data = bean.getData();
        adapter.initData(data);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void onFild(final String message) {
        Log.e("ShowonFild", Thread.currentThread().getName());
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Log.e("ShowonFild", message);
            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.detachData();
    }
}

//属性动画

 switch (view.getId()) {
            case R.id.py:
            //平移
                AnimatorSet set1 = new AnimatorSet();
                ObjectAnimator translationX = ObjectAnimator.ofFloat(kaoimage, "translationX", 0, 600);
                ObjectAnimator translationY = ObjectAnimator.ofFloat(kaoimage, "translationY", 0, 900);
                //translationX.start();
                set1.play(translationX).with(translationY);
                set1.setDuration(3000);
                set1.start();
                break;
            case R.id.jb:
            //渐变
                ObjectAnimator alpha = ObjectAnimator.ofFloat(kaoimage, "alpha", 1, 0,1);
                alpha.setDuration(3000);
                alpha.start();
                break;
            case R.id.xz:
            //旋转
                ObjectAnimator rotation = ObjectAnimator.ofFloat(kaoimage, "rotation", 360, 0);
                rotation.setDuration(3000);
                rotation.start();
                break;
            case R.id.sf:
            //缩放 变大变小
                AnimatorSet set2 = new AnimatorSet();
                ObjectAnimator scaleX = ObjectAnimator.ofFloat(kaoimage, "scaleX", 1, 3,1);
                ObjectAnimator scaleY = ObjectAnimator.ofFloat(kaoimage, "scaleY", 1,3, 1);
                set2.play(scaleX).with(scaleY);
                set2.setDuration(3000);
                set2.start();
                break;

//简单全局捕获异常
在App类中写

public class App extends Application implements Thread.UncaughtExceptionHandler{
    @Override
    public void onCreate() {
        super.onCreate();
        //进行异常捕获
        Thread.setDefaultUncaughtExceptionHandler(this);
    }
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        //进行日志打印
       Writer writer =  new StringWriter();
        PrintWriter printWriter = new PrintWriter(writer);
        throwable.printStackTrace(printWriter);
        Toast.makeText(this,"凉了",Toast.LENGTH_LONG).show();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值