week3test

///utils

public class OKHttpUtil {

    public static OKHttpUtil instance;

    public OkHttpClient okHttpClient;

    //私有化构造函数,阻止其他类内容new关键字创建对象

    private OKHttpUtil() {

        //tip:获取OKHttp对象

        if (null == okHttpClient) {

            synchronized (OkHttpClient.class) {

扫描二维码关注公众号,回复: 2872699 查看本文章

                if (null == okHttpClient) {

                    //okHttpClient = new OkHttpClient();

                    //添加缓存拦截器

                    okHttpClient = new OkHttpClient

                            .Builder()

                            .build();

                }

            }

        }

    }

    //获取工具类对象

    public static OKHttpUtil getInstance() {

        //DCL双重检测锁获取实例对象

        if (null == instance) {

            //用锁防止多线程高并发的访问

            synchronized (OKHttpUtil.class) {

                if (null == instance) {

                    instance = new OKHttpUtil();

                }

            }

        }

        return instance;

    }

    /**

     * get请求的封装

     *

     * @param urlString url地址

     * @param callback  请求回调

     */

    public void get(String urlString, Callback callback) {

        Request request = new Request.Builder().url(urlString).build();

        okHttpClient.newCall(request).enqueue(callback);

    }

    public void post(String urlString, FormBody formBody, Callback callback) {

        Request request = new Request.Builder().method("POST", formBody).url(urlString).build();

        okHttpClient.newCall(request).enqueue(callback);

    }

}

/////////////////////////////////////////////////////////////////////////////////model层

public class IModelImpl implements IContract.IModel {

    public static final String URL = "http://www.zhaoapi.cn/product/searchProducts?keywords=%E6%89%8B%E6%9C%BA&page=1&sort=0";

    @Override

    public void requestData(final onCallBackLisenter onCallBackLisenter) {

        OKHttpUtil.getInstance().get(URL, new Callback() {

            @Override

            public void onFailure(Call call, IOException e) {

                String errorMsg = e.getMessage().toString();

                onCallBackLisenter.onCallBack(errorMsg);

            }

            @Override

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

                String responseString = response.body().string().toString();

                onCallBackLisenter.onCallBack(responseString);

            }

        });

    }

}

/////////////////////////////////////////////Presenter层

public class IPresenterImpl implements IContract.IPresenter<IContract.IView> {

    IContract.IView iView;

    private IContract.IModel iModel;

    private WeakReference<IContract.IView> viewWeakReference;

    private WeakReference<IContract.IModel> modelWeakReference;

    @Override

    public void attachView(IContract.IView iView) {

        this.iView = iView;

        iModel = new IModelImpl();

        viewWeakReference = new WeakReference<>(iView);

        modelWeakReference = new WeakReference<>(iModel);

    }

    @Override

    public void detachView(IContract.IView iView) {

        viewWeakReference.clear();

        modelWeakReference.clear();

    }

    @Override

    public void requestInfo() {

        iView.loading();

        iModel.requestData(new IContract.IModel.onCallBackLisenter() {

            @Override

            public void onCallBack(String msg) {

                iView.showData(msg);

                iView.completed();

            }

        });

    }

}

////////////////////////////////////////////////////////////////Application

public class App extends Application {

    @Override

    public void onCreate() {

        super.onCreate();

        UMConfigure.init(this,"5b778641f43e48343500019f"

                ,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0

        PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");

        //豆瓣RENREN平台目前只能在服务器端配置

        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");

        PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");

        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");

        PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");

        PlatformConfig.setAlipay("2015111700822536");

        PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");

        PlatformConfig.setPinterest("1439206");

        PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");

        PlatformConfig.setDing("dingoalmlnohc0wggfedpk");

        PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");

        PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");

    }

}

//////////////////////////////// IContract 

public interface IContract {

    public interface IView {

        void loading();

        void showData(String msg);

        void completed();

    }

    public interface IPresenter<IView> {

        void attachView(IView iView);

        void detachView(IView iView);

        void requestInfo();

    }

    public interface IModel {

        void requestData(onCallBackLisenter onCallBackLisenter);

        interface onCallBackLisenter {

            void onCallBack(String msg);

        }

    }

}

/////////////////////////////////////view层

public class CircleView extends View {

    private int radius;

    private int color;

    public CircleView(Context context) {

        super(context);

    }

    public CircleView(Context context, @Nullable AttributeSet attrs) {

        super(context, attrs);

        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleView);

        for (int i = 0; i < typedArray.length(); i++) {

            int index = typedArray.getIndex(i);

            switch (i) {

                case R.styleable.CircleView_radius:

                    radius = typedArray.getInt(index, 20);

                    break;

                case R.styleable.CircleView_color:

                    color = typedArray.getColor(index, Color.GREEN);

                    break;

            }

        }

    }

    @Override

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        setMeasuredDimension(getMeasuredWidth(widthMeasureSpec), getMeasuredHeight(heightMeasureSpec));

    }

    private int getMeasuredHeight(int heightMeasureSpec) {

        int mode = MeasureSpec.getMode(heightMeasureSpec);

        int size = MeasureSpec.getSize(heightMeasureSpec);

        int result = 0;

        if (mode == MeasureSpec.AT_MOST) {

            result = getPaddingTop() + getPaddingBottom() + 2 * radius;

        } else if (mode == MeasureSpec.EXACTLY) {

            result = size;

        }

        return result;

    }

    private int getMeasuredWidth(int widthMeasureSpec) {

        int mode = MeasureSpec.getMode(widthMeasureSpec);

        int size = MeasureSpec.getSize(widthMeasureSpec);

        int result = 0;

        if (mode == MeasureSpec.AT_MOST) {

            result = getPaddingLeft() + getPaddingRight() + 2 * radius;

        } else if (mode == MeasureSpec.EXACTLY) {

            result = size;

        }

        return result;

    }

    @Override

    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);

        Paint paint = new Paint();

        paint.setColor(color);

        paint.setAntiAlias(true);

        canvas.drawCircle(radius, radius, radius, paint);

    }

}

//////////////adapter包

public class SubAdapter extends RecyclerView.Adapter<SubAdapter.SubViewHolder> {

    onItemClickLisenter onItemClickLisenter;

    public interface onItemClickLisenter {

        void onItemClick(int layoutPosition);

    }

    public void setOnItemClickLisenter(onItemClickLisenter onItemClickLisenter) {

        this.onItemClickLisenter = onItemClickLisenter;

    }

    List<InfoBean.DataBean> data;

    Context context;

    public SubAdapter(Context context, List<InfoBean.DataBean> data) {

        this.data = data;

        this.context = context;

    }

    @NonNull

    @Override

    public SubViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View rootView = LayoutInflater.from(context).inflate(R.layout.recycler_item, viewGroup, false);

        SubViewHolder subViewHolder = new SubViewHolder(rootView);

        return subViewHolder;

    }

    @Override

    public void onBindViewHolder(@NonNull SubViewHolder subViewHolder, int position) {

        String[] images = data.get(position).getImages().split("\\|");

        Picasso.get().load(images[0]).into(subViewHolder.iv_item_icon);

        subViewHolder.tv_showInfo.setText(data.get(position).getCreatetime());

    }

    @Override

    public int getItemCount() {

        return data.size();

    }

    class SubViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private ImageView iv_item_icon;

        private TextView tv_showInfo;

        public SubViewHolder(@NonNull View itemView) {

            super(itemView);

            itemView.setOnClickListener(this);

            iv_item_icon = itemView.findViewById(R.id.iv_item_icon);

            tv_showInfo = itemView.findViewById(R.id.tv_showInfo);

        }

        @Override

        public void onClick(View v) {

            Log.d("SubViewHolder", "getLayoutPosition():" + getLayoutPosition());

            onItemClickLisenter.onItemClick(getLayoutPosition()-1);

        }

    }

}

////////////////////////////////////// Animator

public class AnimatorActivity extends AppCompatActivity {

    @BindView(R.id.cv_circle)

    CircleView cvCircle;

    @BindView(R.id.btn_translate)

    Button btnTranslate;

    @BindView(R.id.btn_scale)

    Button btnScale;

    @BindView(R.id.btn_rotate)

    Button btnRotate;

    @BindView(R.id.btn_alpha)

    Button btnAlpha;

    @BindView(R.id.btn_animator_set)

    Button btnAnimatorSet;

    private Context context;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_animator);

        ButterKnife.bind(this);

        context = AnimatorActivity.this;

    }

    @OnClick({R.id.btn_translate, R.id.btn_scale, R.id.btn_rotate, R.id.btn_alpha, R.id.btn_animator_set, R.id.cv_circle})

    public void onViewClicked(View view) {

        switch (view.getId()) {

            case R.id.btn_translate:

                bindAnimator(R.animator.translate_animator);

                break;

            case R.id.btn_scale:

                bindAnimator(R.animator.scale_animator);

                break;

            case R.id.btn_rotate:

                bindAnimator(R.animator.rotate_animator);

                break;

            case R.id.btn_alpha:

                bindAnimator(R.animator.alpha_animator);

                break;

            case R.id.btn_animator_set:

                bindAnimator(R.animator.set_animator);

                break;

            case R.id.cv_circle:

                startActivity(new Intent(this, LoginActivity.class));

                break;

        }

    }

    private void bindAnimator(int animatorId) {

        Animator animator = AnimatorInflater.loadAnimator(context, animatorId);

        animator.setTarget(cvCircle);

        animator.start();

    }

}

///////////////////////////第三方

public class LoginActivity extends AppCompatActivity {

    @BindView(R.id.btn_login)

    Button btnLogin;

    UMAuthListener authListener = new UMAuthListener() {

        /**

         * @desc 授权开始的回调

         * @param platform 平台名称

         */

        @Override

        public void onStart(SHARE_MEDIA platform) {

        }

        /**

         * @desc 授权成功的回调

         * @param platform 平台名称

         * @param action 行为序号,开发者用不上

         * @param data 用户资料返回

         */

        @Override

        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {

            //uid

            //name

            //gender

            //iconurl

            String uid = data.get("uid");

            final String name = data.get("name");

            final String gender = data.get("gender");

            final String iconurl = data.get("iconurl");

            Toast.makeText(LoginActivity.this, "成功了" + uid + "..." + name + "...." + gender + "..." + iconurl, Toast.LENGTH_LONG).show();

            Log.d("LoginActivity", "成功了" + uid + "..." + name + "...." + gender + "..." + iconurl);

            runOnUiThread(new Runnable() {

                @Override

                public void run() {

                    Picasso.get().load(iconurl).into(ivIcon);

                    tvGender.setText(gender);

                    tvNickName.setText(name);

                }

            });

        }

        /**

         * @desc 授权失败的回调

         * @param platform 平台名称

         * @param action 行为序号,开发者用不上

         * @param t 错误原因

         */

        @Override

        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

            Toast.makeText(LoginActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();

        }

        /**

         * @desc 授权取消的回调

         * @param platform 平台名称

         * @param action 行为序号,开发者用不上

         */

        @Override

        public void onCancel(SHARE_MEDIA platform, int action) {

            Toast.makeText(LoginActivity.this, "取消了", Toast.LENGTH_LONG).show();

        }

    };

    @BindView(R.id.btn_icon)

    TextView btnIcon;

    @BindView(R.id.iv_icon)

    ImageView ivIcon;

    @BindView(R.id.tv_gender)

    TextView tvGender;

    @BindView(R.id.tv_nickName)

    TextView tvNickName;

    @BindView(R.id.btn_showData)

    Button btnShowData;

    @BindView(R.id.ll_container)

    LinearLayout llContainer;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_login);

        ButterKnife.bind(this);

        if (Build.VERSION.SDK_INT >= 23) {

            String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE, Manifest.permission.READ_LOGS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SET_DEBUG_APP, Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_APN_SETTINGS};

            ActivityCompat.requestPermissions(this, mPermissionList, 123);

        }

    }

    @OnClick(R.id.btn_login)

    public void onViewClicked() {

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

    }

    @Override

    public void onRequestPermissionsResult(int requestCode,

                                           String permissions[], int[] grantResults) {

    }

    @OnClick({R.id.btn_login, R.id.iv_icon, R.id.btn_showData})

    public void onViewClicked(View view) {

        switch (view.getId()) {

            case R.id.btn_login:

                btnLogin.setVisibility(View.GONE);

                UMShareAPI.get(this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener);

                llContainer.setVisibility(View.VISIBLE);

                break;

            case R.id.iv_icon:

                //TODO

                break;

            case R.id.btn_showData:

                startActivity(new Intent(this, MainActivity.class));

                break;

        }

    }

}

/////////////////////////////////////////////////////////地图

public class MapActivity extends AppCompatActivity {

    MapView mMapView = null;

    //初始化地图控制器对象

    AMap aMap;

    //声明AMapLocationClient类对象

    public AMapLocationClient mLocationClient = null;

    //声明AMapLocationClientOption对象

    public AMapLocationClientOption mLocationOption = null;

    //声明定位回调监听器

    public AMapLocationListener mLocationListener = new AMapLocationListener() {

        @Override

        public void onLocationChanged(AMapLocation aMapLocation) {

            if (aMapLocation != null) {

                if (aMapLocation.getErrorCode() == 0) {

                    //可在其中解析amapLocation获取相应内容。

                    Log.e("AmapSuccess", "location Error, ErrCode:"

                            + aMapLocation.getLatitude() + ", errInfo:"

                            + aMapLocation.getLongitude());

                } else {

                    //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。

                    Log.e("AmapError", "location Error, ErrCode:"

                            + aMapLocation.getErrorCode() + ", errInfo:"

                            + aMapLocation.getErrorInfo());

                }

            }

        }

    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_map);

        //获取地图控件引用

        mMapView = (MapView) findViewById(R.id.map);

        //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图

        mMapView.onCreate(savedInstanceState);

        //定义了一个地图view

        mMapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。

        if (aMap == null) {

            aMap = mMapView.getMap();

        }

        //初始化定位

        mLocationClient = new AMapLocationClient(getApplicationContext());

        //初始化AMapLocationClientOption对象

        mLocationOption = new AMapLocationClientOption();

        mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);

        //设置定位回调监听

        mLocationClient.setLocationListener(mLocationListener);

        //给定位客户端对象设置定位参数

        mLocationClient.setLocationOption(mLocationOption);

        //启动定位

        mLocationClient.startLocation();

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图

        mMapView.onDestroy();

    }

    @Override

    protected void onResume() {

        super.onResume();

        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图

        mMapView.onResume();

    }

    @Override

    protected void onPause() {

        super.onPause();

        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制

        mMapView.onPause();

    }

    @Override

    protected void onSaveInstanceState(Bundle outState) {

        super.onSaveInstanceState(outState);

        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态

        mMapView.onSaveInstanceState(outState);

    }

}

//////////////////////////////////////////////主界面

public class MainActivity extends AppCompatActivity implements IContract.IView {

    @BindView(R.id.xrv_container)

    XRecyclerView xrvContainer;

    private Context context;

    private IContract.IPresenter iPresenter;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

        context = MainActivity.this;

        iPresenter = new IPresenterImpl();

        iPresenter.attachView(this);

        iPresenter.requestInfo();

    }

    @Override

    public void loading() {

    }

    @Override

    public void showData(final String msg) {

        runOnUiThread(new Runnable() {

            @Override

            public void run() {

                Gson gson = new Gson();

                InfoBean infoBean = gson.fromJson(msg, InfoBean.class);

                final List<InfoBean.DataBean> data = infoBean.getData();

                //设置XRecyclerView

                LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);

                layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

                xrvContainer.setLayoutManager(layoutManager);

                //数据展示

                SubAdapter subAdapter = new SubAdapter(context, data);

                xrvContainer.setAdapter(subAdapter);

                subAdapter.setOnItemClickLisenter(new SubAdapter.onItemClickLisenter() {

                    @Override

                    public void onItemClick(int layoutPosition) {

                        //todo

//                        data.remove(layoutPosition);

//                        xrvContainer.notifyItemRemoved(data, layoutPosition);

                        startActivity(new Intent(MainActivity.this, MapActivity.class));

                    }

                });

            }

        });

    }

    @Override

    public void completed() {

    }

    @Override

    protected void onDestroy() {

        super.onDestroy();

        iPresenter.detachView(this);

    }

}

猜你喜欢

转载自www.cnblogs.com/xiaxinxin/p/9503560.html
今日推荐