美文网首页
P2PInvest笔记04

P2PInvest笔记04

作者: GeekGray | 来源:发表于2018-09-27 22:40 被阅读7次

阅读原文

025-支付功能的集成

1. 下载sdk/demo/文档
2. demo尝试的去运行
3. 开始集成-->《移动支付接口SDK2.0标准版接入与使用规则》
    1. 添加jar,alipay.jar
    2. 添加lib,alipay_lib
    3. 添加了一个activity
    4. 添加了一些权限
    5. 调用支付的核心代码




具体参见
《移动支付接口SDK2.0标准版接入与使用规则》

1.充值业务

//默认情况下,button是不可操作的
        btnChongzhi.setClickable(false);

        etChongzhi.addTextChangedListener(new TextWatcher()
        {

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
                Log.e("TAG", "ChongZhiActivity beforeTextChanged()");
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                Log.e("TAG", "ChongZhiActivity onTextChanged()");
            }

            @Override
            public void afterTextChanged(Editable s)
            {
                Log.e("TAG", "ChongZhiActivity afterTextChanged()");

                String money = etChongzhi.getText().toString().trim();
                if (TextUtils.isEmpty(money))
                {
                    //设置button为不可操作的
                    btnChongzhi.setClickable(false);
                    //设置背景颜色
                    btnChongzhi.setBackgroundResource(R.drawable.btn_02);
                }
                else
                {
                    //设置button为可操作的
                    btnChongzhi.setClickable(true);
                    //设置背景颜色
                    btnChongzhi.setBackgroundResource(R.drawable.btn_01);
                }
            }
        });

2.提现业务

p2p金融项目当中的提现业务:

1.并不是即时到账

2.业务流程:

用户发送一个提现请求---->经过这个公司审核该请求--->审核通过--->24小时或48小时内将提现的钱款打入收款账户银行卡

MeFragment中

 //设置“充值”操作
    @OnClick(R.id.recharge)
    public void reCharge(View view)
    {
        ((BaseActivity) this.getActivity()).goToActivity(ChongZhiActivity.class, null);
    }

提现页面

/**
 * @author: Hashub
 * @WeChat: NGSHMVP
 * @Date: 2018/9/25 16:15
 * @function:提现界面
 */
public class TiXianActivity extends BaseActivity
{


    @Bind(R.id.iv_title_back)
    ImageView ivTitleBack;
    @Bind(R.id.tv_title)
    TextView tvTitle;
    @Bind(R.id.iv_title_setting)
    ImageView ivTitleSetting;
    @Bind(R.id.account_zhifubao)
    TextView accountZhifubao;
    @Bind(R.id.select_bank)
    RelativeLayout selectBank;
    @Bind(R.id.chongzhi_text)
    TextView chongzhiText;
    @Bind(R.id.view)
    View view;
    @Bind(R.id.et_input_money)
    EditText etInputMoney;
    @Bind(R.id.chongzhi_text2)
    TextView chongzhiText2;
    @Bind(R.id.textView5)
    TextView textView5;
    @Bind(R.id.btn_tixian)
    Button btnTixian;

    @Override
    protected void initData()
    {
//设置当前的体现的button是不可操作的
        btnTixian.setClickable(false);
        etInputMoney.addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {

            }

            @Override
            public void afterTextChanged(Editable s)
            {
                String money = etInputMoney.getText().toString().trim();
                if (TextUtils.isEmpty(money))
                {
                    //设置button不可操作的
                    btnTixian.setClickable(false);
                    //修改背景颜色
                    btnTixian.setBackgroundResource(R.drawable.btn_02);
                }
                else
                {
                    //设置button可操作的
                    btnTixian.setClickable(true);
                    //修改背景颜色
                    btnTixian.setBackgroundResource(R.drawable.btn_01);
                }
            }
        });
    }

    @Override
    protected void initTitle()
    {
        ivTitleBack.setVisibility(View.VISIBLE);
        tvTitle.setText("提现");
        ivTitleSetting.setVisibility(View.INVISIBLE);
    }

    @Override
    protected int getLayoutId()
    {
        return R.layout.activity_ti_xian;
    }


    @OnClick({R.id.iv_title_back, R.id.btn_tixian})
    public void onViewClicked(View view)
    {
        switch (view.getId())
        {
            case R.id.iv_title_back:
                removeCurrentActivity();
                break;

            case R.id.btn_tixian:
                //将要提现的数据数额发送给后台,由后台连接第三方支付平台,完成金额的提现操作。(略)
                //提示用户信息:
                UIUtils.toast("您的提现申请已被成功受理。审核通过后,24小时内,你的钱自然会到账", false);

                UIUtils.getHandler().postDelayed(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        removeCurrentActivity();
                    }
                }, 2000);
                break;
        }
    }
}

026-MPAndroidChart库的使用

MPAndroidChart:一款基于Android的开源图表库
MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。MPAndroidChart同样拥有常用的图表类型:线型图、饼状图、柱状图、直方图和散点图,其中直方图支持3d效果。

该库的可扩展性强,代码相对规范,最近一次更新有很大改进,如果不喜欢AChartEngine的过于复杂,可以考虑在此库的基础上开发自己的图表类。

使用方法:

1、直接使用jar方式,需要导入

mpchartlib.jar,nineoldandroidsjar。

2、使用libproject的方式,作为项目依赖。
步骤:

如果使用 LineChart, BarChart, ScatterChart, CandleStickChart or PieChart , 可以直接在xml中定义。

 <com.github.mikephil.charting.charts.LineChart
 android:id="@+id/chart"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />
 LineChart chart = (LineChart) findViewById(R.id.chart);

或则直接在代码中声明和实例化。

 LineChart chart = new LineChart(Context);

主要的Api方法:

setDescription(String desc): 设置表格的描述
setDescriptionTypeface(Typeface t):自定义表格中显示的字体
setDrawYValues(boolean enabled): 设置是否显示y轴的值的数据
setValuePaintColor(int color):设置表格中y轴的值的颜色,但是必须设置setDrawYValues(true)
setValueTypeface(Typeface t):设置字体
setValueFormatter(DecimalFormat format): 设置显示的格式
setPaint(Paint p, int which): 自定义笔刷
public ChartData getDataCurrent():返回ChartData对象当前显示的图表。它包含了所有信息的显示值最小和最大值等
public float getYChartMin(): 返回当前最小值
public float getYChartMax(): 返回当前最大值
public float getAverage(): 返回所有值的平均值
public float getAverage(int type): 返回平均值
public PointF getCenter(): 返回中间点
public Paint getPaint(int which): 得到笔刷
setTouchEnabled(boolean enabled): 设置是否可以触摸,如为false,则不能拖动,缩放等
setDragScaleEnabled(boolean enabled): 设置是否可以拖拽,缩放
setOnChartValueSelectedListener(OnChartValueSelectedListener l): 设置表格上的点,被点击的时候,的回调函数
setHighlightEnabled(boolean enabled): 设置点击value的时候,是否高亮显示
public void highlightValues(Highlight[] highs): 设置高亮显示
saveToGallery(String title): 保存图表到图库中
saveToPath(String title, String pathOnSD): 保存.
setScaleMinima(float x, float y): 设置最小的缩放
centerViewPort(int xIndex, float val): 设置视口
fitScreen(): 适应屏幕

动画:

所有的图表类型都支持下面三种动画,分别是x方向,y方向,xy方向。

animateX(int durationMillis): x轴方向
animateY(int durationMillis): y轴方向
animateXY(int xDuration, int yDuration): xy轴方向
mChart.animateX(3000f); // animate horizontal 3000 milliseconds
// or:
mChart.animateY(3000f); // animate vertical 3000 milliseconds
// or:
mChart.animateXY(3000f, 3000f); // animate horizontal and vertical 3000 milliseconds

注意:如果调用动画方法后,就没有必要调用invalidate()方法,来刷新界面了。

1. 折线图绘制分析与实现

拷贝ListViewMultiChartActivity类的如下两个方法:

private LineData generateDataLine(int cnt) {}去掉参数

private ArrayList<String> getMonths() {}

 @Override
    protected void initData()
    {
        mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
        //设置当前的折线图的描述
        lineChart.setDescription("林丹出轨事件的关注度");
        //是否绘制网格背景
        lineChart.setDrawGridBackground(false);

        //获取当前的x轴对象
        XAxis xAxis = lineChart.getXAxis();
        //设置x轴的显示位置
        xAxis.setPosition(XAxis.XAxisPosition.TOP);
        //设置x轴的字体
        xAxis.setTypeface(mTf);
        //是否绘制x轴的网格线
        xAxis.setDrawGridLines(false);
        //是否绘制x轴的轴线
        xAxis.setDrawAxisLine(true);

        //获取左边的y轴对象
        YAxis leftAxis = lineChart.getAxisLeft();
        //设置左边y轴的字体
        leftAxis.setTypeface(mTf);
        //参数1:左边y轴提供的区间的个数。 参数2:是否均匀分布这几个区间。 false:均匀。 true:不均匀
        leftAxis.setLabelCount(5, false);

        //获取右边的y轴对象
        YAxis rightAxis = lineChart.getAxisRight();
        //将右边的y轴设置为不显式的
        rightAxis.setEnabled(false);

        // 提供折线数据。(通常情况下,折线的数据来自于服务器的数据)
        LineData lineData = generateDataLine();
        lineChart.setData(lineData);

        // 设置x轴方向的动画。执行时间是750.
        // 不需要再执行:invalidate();
        lineChart.animateX(750);
    }



/**
     * generates a random ChartData object with just one DataSet
     *
     * @return
     */
    private LineData generateDataLine()
    {
        //折线1:
        ArrayList<Entry> e1 = new ArrayList<Entry>();
        //提供折线中点的数据
        for (int i = 0; i < 12; i++)
        {
            e1.add(new Entry((int) (Math.random() * 65) + 40, i));
        }

        LineDataSet d1 = new LineDataSet(e1, "New DataSet 1");
        //设置折线的宽度
        d1.setLineWidth(4.5f);
        //设置小圆圈的尺寸
        d1.setCircleSize(4.5f);
        //设置高亮的颜色
        d1.setHighLightColor(Color.rgb(244, 0, 0));
        //是否显示小圆圈对应的数值
        d1.setDrawValues(true);

        //折线2:
//        ArrayList<Entry> e2 = new ArrayList<Entry>();
//
//        for (int i = 0; i < 12; i++) {
//            e2.add(new Entry(e1.get(i).getVal() - 30, i));
//        }
//
//        LineDataSet d2 = new LineDataSet(e2, "New DataSet " + cnt + ", (2)");
//        d2.setLineWidth(2.5f);
//        d2.setCircleSize(4.5f);
//        d2.setHighLightColor(Color.rgb(244, 117, 117));
//        d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]);
//        d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]);
//        d2.setDrawValues(false);

        ArrayList<LineDataSet> sets = new ArrayList<LineDataSet>();
        sets.add(d1);

        LineData cd = new LineData(getMonths(), sets);
        return cd;
    }

    private ArrayList<String> getMonths()
    {

        ArrayList<String> m = new ArrayList<String>();
        m.add("Jan");
        m.add("Feb");
        m.add("Mar");
        m.add("Apr");
        m.add("May");
        m.add("Jun");
        m.add("Jul");
        m.add("Aug");
        m.add("Sep");
        m.add("Okt");
        m.add("Nov");
        m.add("Dec");

        return m;
    }

柱状图绘制分析与实现

@Override
    protected void initData()
    {
        mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
        // apply styling
        barChart.setDescription("三星note7爆炸门事件后,三星品牌度");
        barChart.setDrawGridBackground(false);
        //是否绘制柱状图的背景
        barChart.setDrawBarShadow(false);

        //获取x轴对象
        XAxis xAxis = barChart.getXAxis();
        //设置x轴的显示位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        //设置x轴的字体
        xAxis.setTypeface(mTf);
        //是否绘制x轴的网格线
        xAxis.setDrawGridLines(false);
        //是否绘制x轴的轴线
        xAxis.setDrawAxisLine(true);

        //获取左边y轴对象
        YAxis leftAxis = barChart.getAxisLeft();
        //设置y轴的字体
        leftAxis.setTypeface(mTf);
        //参数1:左边y轴提供的区间的个数。 参数2:是否均匀分布这几个区间。 false:均匀。 true:不均匀
        leftAxis.setLabelCount(5, false);
        //设置最大值距离顶部的距离
        leftAxis.setSpaceTop(0);

        YAxis rightAxis = barChart.getAxisRight();
        rightAxis.setEnabled(false);

        //提供柱状图的数据
        BarData barData = generateDataBar();
        barData.setValueTypeface(mTf);

        // set data
        barChart.setData(barData);

        // 设置y轴方向的动画
        barChart.animateY(700);
    }


/**
     * generates a random ChartData object with just one DataSet
     *
     * @return
     */
    private BarData generateDataBar()
    {

        ArrayList<BarEntry> entries = new ArrayList<BarEntry>();

        for (int i = 0; i < 12; i++)
        {
            entries.add(new BarEntry((int) (Math.random() * 70) + 30, i));
        }

        BarDataSet d = new BarDataSet(entries, "New DataSet 1");
        //设置相邻的柱状图之间的距离
        d.setBarSpacePercent(40f);
        d.setColors(ColorTemplate.VORDIPLOM_COLORS);
        //设置高亮的透明度
        d.setHighLightAlpha(255);

        BarData cd = new BarData(getMonths(), d);
        return cd;
    }

    private ArrayList<String> getMonths()
    {

        ArrayList<String> m = new ArrayList<String>();
        m.add("Jan");
        m.add("Feb");
        m.add("Mar");
        m.add("Apr");
        m.add("May");
        m.add("Jun");
        m.add("Jul");
        m.add("Aug");
        m.add("Sep");
        m.add("Okt");
        m.add("Nov");
        m.add("Dec");

        return m;
    }

3. 饼状图绘制分析与实现

 private Typeface mTf;//声明字体库

    @Override
    protected void initData()
    {
        mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");
        // apply styling
        pieChart.setDescription("android厂商2016年手机占有率");
        pieChart.setHoleRadius(52f);//最内层的圆的半径
        pieChart.setTransparentCircleRadius(77f);//包裹内层圆的半径
        pieChart.setCenterText("Android\n厂商占比");
        pieChart.setCenterTextTypeface(mTf);
        pieChart.setCenterTextSize(18f);
        //是否使用百分比。true:各部分的百分比的和是100%。
        pieChart.setUsePercentValues(true);

        PieData pieData = generateDataPie();
        pieData.setValueFormatter(new PercentFormatter());
        pieData.setValueTypeface(mTf);
        pieData.setValueTextSize(11f);
        pieData.setValueTextColor(Color.RED);
        // set data
        pieChart.setData(pieData);

        //获取右上角的描述结构的对象
        Legend l = pieChart.getLegend();
        l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART);
        l.setYEntrySpace(10f);//相邻的entry在y轴上的间距
        l.setYOffset(30f);//第一个entry距离最顶端的间距

        // do not forget to refresh the chart
        // pieChart.invalidate();
        pieChart.animateXY(900, 900);
    }


 /**
     * generates a random ChartData object with just one DataSet
     *
     * @return
     */
    private PieData generateDataPie()
    {

        ArrayList<Entry> entries = new ArrayList<Entry>();

        for (int i = 0; i < 4; i++)
        {
            entries.add(new Entry((int) (Math.random() * 70) + 30, i));
        }

        PieDataSet d = new PieDataSet(entries, "");

        // 相邻模块的间距
        d.setSliceSpace(2f);
        d.setColors(ColorTemplate.VORDIPLOM_COLORS);

        PieData cd = new PieData(getQuarters(), d);
        return cd;
    }

    private ArrayList<String> getQuarters()
    {

        ArrayList<String> q = new ArrayList<String>();
        q.add("三星");
        q.add("华为");
        q.add("oppo");
        q.add("vivo");

        return q;
    }

027-MoreFragment的布局设置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <include layout="@layout/common_title"></include>

    <com.example.p2pinvest.ui.MyScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv_more_regist"
                android:text="用户注册"
                android:drawableLeft="@drawable/icon_more_regist"
                android:layout_width="match_parent"
                style="@style/MoreTextStyle" />


            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line"></View>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:text="手势密码"
                    android:drawableLeft="@drawable/icon_more_secret"
                    android:layout_width="wrap_content"
                    style="@style/MoreTextStyle" />

                <ToggleButton
                    android:id="@+id/toggle_more"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="10dp"
                    android:background="@drawable/toggle_selector"
                    android:textOn=""
                    android:textOff=""
                    />

            </RelativeLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line"></View>

            <TextView
                android:id="@+id/tv_more_reset"
                android:text="重置手势密码"
                android:drawableLeft="@drawable/icon_more_reset"
                android:layout_width="match_parent"
                style="@style/MoreTextStyle" />


            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line"></View>

            <RelativeLayout
                android:id="@+id/rl_more_contact"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:text="联系客服"
                    android:drawableLeft="@drawable/icon_more_contact"
                    android:layout_width="wrap_content"
                    style="@style/MoreTextStyle" />

                <TextView
                    android:id="@+id/tv_more_phone"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="010-56253825"
                    android:textColor="@android:color/holo_red_dark"
                    android:textSize="20sp"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="10dp"
                    />

            </RelativeLayout>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line"></View>
            <TextView
                android:id="@+id/tv_more_fankui"
                android:text="用户反馈"
                android:drawableLeft="@drawable/icon_more_sms"
                android:layout_width="match_parent"
                style="@style/MoreTextStyle" />


            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line"></View>

            <TextView
                android:id="@+id/tv_more_share"
                android:text="分享给好友"
                android:drawableLeft="@drawable/icon_more_share"
                android:layout_width="match_parent"
                style="@style/MoreTextStyle" />


            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider_line"></View>

            <TextView
                android:id="@+id/tv_more_about"
                android:text="关于硅谷理财"
                android:drawableLeft="@drawable/icon_more_about"
                android:layout_width="match_parent"
                style="@style/MoreTextStyle" />



        </LinearLayout>


    </com.example.p2pinvest.ui.MyScrollView>

</LinearLayout>

2.ToggleButton的使用

<ToggleButton
                android:id="@+id/toggle_more_secret"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginBottom="3dp"
                android:layout_marginRight="5dp"
                android:background="@drawable/toggle_selector"
                android:textOff=""
                android:textOn="" />
**************************
设置选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

   <item
        android:state_checked="true"
        android:drawable="@drawable/toggle_on"
        ></item>
   <item
        android:state_checked="false"
        android:drawable="@drawable/toggle_off"
        ></item>


</selector>

028-用户注册功能的实现

需要客户端提交数据前判断的逻辑:

1.输入的信息不能为空

2.两次输入的密码是否不一致

3.在请求到服务器以后,需要判断服务器端是否已经注册过此手机号

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

   <include layout="@layout/common_top" />

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:gravity="center_vertical"
        android:background="@color/white"
        android:paddingLeft="17dp"
        android:paddingRight="17dp">

       <TextView
            android:layout_width="95dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="手机号:"
            android:textColor="#333333"
            android:textSize="14sp" />

       <EditText
            android:id="@+id/et_register_number"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入手机号"
            android:inputType="phone"
            android:maxLines="1"
            android:singleLine="true"
            android:textColor="#5c5c5c"
            android:textSize="14sp" />
   </LinearLayout>

   <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:listDivider" />

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:gravity="center_vertical"
        android:background="@color/white"
        android:paddingLeft="17dp"
        android:paddingRight="17dp">

       <TextView
            android:layout_width="95dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="用户名:"
            android:textColor="#333333"
            android:textSize="14sp" />

       <EditText
            android:id="@+id/et_register_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入用户名"
            android:inputType="text"
            android:maxLines="1"
            android:singleLine="true"
            android:textColor="#5c5c5c"
            android:textSize="14sp" />
   </LinearLayout>

   <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:listDivider" />
   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:gravity="center_vertical"
        android:background="@color/white"
        android:paddingLeft="17dp"
        android:paddingRight="17dp">

       <TextView
            android:layout_width="95dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="密码:"
            android:textColor="#333333"
            android:textSize="14sp" />

       <EditText
            android:id="@+id/et_register_pwd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入密码"
            android:inputType="textPassword"
            android:maxLines="1"
            android:singleLine="true"
            android:textColor="#5c5c5c"
            android:textSize="14sp" />
   </LinearLayout>

   <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:listDivider" />

   <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:gravity="center_vertical"
        android:background="@color/white"
        android:paddingLeft="17dp"
        android:paddingRight="17dp">

       <TextView
            android:layout_width="95dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="确认密码:"
            android:textColor="#333333"
            android:textSize="14sp" />

       <EditText
            android:id="@+id/et_register_pwdagain"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:hint="请输入手机号"
            android:inputType="textPassword"
            android:maxLines="1"
            android:singleLine="true"
            android:textColor="#5c5c5c"
            android:textSize="14sp" />
   </LinearLayout>

   <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="?android:listDivider" />

   <Button
        android:id="@+id/btn_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="15dp"
        android:background="@drawable/btn_01"
        android:text="注 册"
        android:textColor="#ffffff"
        android:textSize="18sp" />
</LinearLayout>


//设置“注册”button的点击事件
        btnRegister.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //1.获取用户注册的信息
                String name = etRegisterName.getText().toString().trim();
                String number = etRegisterNumber.getText().toString().trim();
                String pwd = etRegisterPwd.getText().toString().trim();
                String pwdAgain = etRegisterPwdagain.getText().toString().trim();


                //2.所填写的信息不能为空
                if (TextUtils.isEmpty(name) || TextUtils.isEmpty(number) || TextUtils.isEmpty(pwd) || TextUtils.isEmpty(pwdAgain))
                {
                    UIUtils.toast("填写的信息不能为空", false);
                }
                else if (!pwd.equals(pwdAgain))
                {//2.两次密码必须一致
                    UIUtils.toast("两次填写的密码不一致", false);
                    etRegisterPwd.setText("");
                    etRegisterPwdagain.setText("");

                }
                else
                {
                    //3.联网发送用户注册信息
                    String url = AppNetConfig.USERREGISTER;
                    RequestParams params = new RequestParams();
//                    name = new String(name.getBytes(),"UTF-8");
                    params.put("name", name);
                    params.put("password", MD5Utils.MD5(pwd));
                    params.put("phone", number);
                    client.post(url, params, new AsyncHttpResponseHandler()
                    {
                        @Override
                        public void onSuccess(String content)
                        {
                            JSONObject jsonObject = JSON.parseObject(content);
                            boolean isExist = jsonObject.getBoolean("isExist");
                            if (isExist)
                            {//已经注册过
                                UIUtils.toast("此用户已注册", false);
                            }
                            else
                            {
                                UIUtils.toast("注册成功", false);
                            }

                        }

                        @Override
                        public void onFailure(Throwable error, String content)
                        {
                            UIUtils.toast("联网请求失败", false);
                        }
                    });
                }

            }
        });
    }

1. 乱码问题

原则:要求客户端与服务器端编码集一致。

客户端:
将str转换为UTF-8:

new String(str.getBytes(), "UTF-8");

服务器端:

request.setCharacterEncoding("UTF-8");

029-手势密码开关设置

1. 获取ToggleButton的保存状态

private void getGestureStatus()
    {
        boolean isOpen = sp.getBoolean("isOpen", false);
        toggleMore.setChecked(isOpen);

    }

2. 设置监和听设置手势开关操作

 private void setGesturePassword()
    {
        toggleMore.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if (isChecked)
                {
//                    UIUtils.toast("开启了手势密码", false);
//                    sp.edit().putBoolean("isOpen", true).commit();
                    String inputCode = sp.getString("inputCode", "");
                    if (TextUtils.isEmpty(inputCode))
                    {//之前没有设置过
                        new AlertDialog.Builder(MoreFragment.this.getActivity())
                                .setTitle("设置手势密码")
                                .setMessage("是否现在设置手势密码")
                                .setPositiveButton("确定", new DialogInterface.OnClickListener()
                                {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which)
                                    {
                                        UIUtils.toast("现在设置手势密码", false);
                                        sp.edit().putBoolean("isOpen", true).commit();
//                                            toggleMore.setChecked(true);
                                        //开启新的activity:
                                        ((BaseActivity) MoreFragment.this.getActivity()).goToActivity(GestureEditActivity.class, null);
                                    }
                                })
                                .setNegativeButton("取消", new DialogInterface.OnClickListener()
                                {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which)
                                    {
                                        UIUtils.toast("取消了现在设置手势密码", false);
                                        sp.edit().putBoolean("isOpen", false).commit();
                                        toggleMore.setChecked(false);

                                    }
                                })
                                .show();
                    }
                    else
                    {
                        UIUtils.toast("开启手势密码", false);
                        sp.edit().putBoolean("isOpen", true).commit();
//                        toggleMore.setChecked(true);
                    }
                }
                else
                {
                    UIUtils.toast("关闭了手势密码", false);
                    sp.edit().putBoolean("isOpen", false).commit();
//                    toggleMore.setChecked(false);

                }
            }
        });
    }

3. 判断本地用户是否开启了手势密码,如果开启,需要校验

在MeFragment中:

如果用户没有登录,则按照原来的操作:提示用户登录。

如果用户登录了,则在doUser()的读取用户登录数据的操作中:

//判断本地用户是否开启了手势密码,如果开启,需要进入

//判断一下,是否开启了手势密码。如果开启:先输入手势密码

        SharedPreferences sp = this.getActivity().getSharedPreferences("secret_protect", Context.MODE_PRIVATE);
        boolean isOpen = sp.getBoolean("isOpen", false);
        if (isOpen)
        {
            ((BaseActivity) this.getActivity()).goToActivity(GestureVerifyActivity.class, null);
            return;
        }

30-重置手势密码

private void resetGesture()
    {
        tvMoreReset.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                boolean checked = toggleMore.isChecked();
                if (checked)
                {
                    ((BaseActivity) MoreFragment.this.getActivity()).goToActivity(GestureEditActivity.class, null);
                }
                else
                {
                    UIUtils.toast("手势密码操作已关闭,请开启后再设置", false);
                }
            }
        });
    }

31-联系客服

private void contactService()
    {
        rlMoreContact.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                new AlertDialog.Builder(MoreFragment.this.getActivity())
                        .setTitle("联系客服")
                        .setMessage("是否现在联系客服:010-56253825")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener()
                        {
                            @Override
                            public void onClick(DialogInterface dialog, int which)
                            {
                                //获取手机号码
                                String phone = tvMorePhone.getText().toString().trim();
                                //使用隐式意图,启动系统拨号应用界面
                                Intent intent = new Intent(Intent.ACTION_CALL);
                                intent.setData(Uri.parse("tel:" + phone));
                                MoreFragment.this.getActivity().startActivity(intent);
                            }
                        })
                        .setNegativeButton("取消", null)
                        .show();
            }
        });
    }

32-用户反馈

private String department = "不明确";

    private void commitFanKui()
    {
        tvMoreFankui.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //提供一个View
                View view = View.inflate(MoreFragment.this.getActivity(), R.layout.view_fankui, null);
                final RadioGroup rg = (RadioGroup) view.findViewById(R.id.rg_fankui);
                final EditText et_fankui_content = (EditText) view.findViewById(R.id.et_fankui_content);

                rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
                {
                    @Override
                    public void onCheckedChanged(RadioGroup group, int checkedId)
                    {
                        RadioButton rb = (RadioButton) rg.findViewById(checkedId);
                        department = rb.getText().toString();
                    }
                });

                new AlertDialog.Builder(MoreFragment.this.getActivity())
                        .setView(view)
                        .setPositiveButton("确定", new DialogInterface.OnClickListener()
                        {
                            @Override
                            public void onClick(DialogInterface dialog, int which)
                            {
                                //获取反馈的信息
                                String content = et_fankui_content.getText().toString();
                                //联网发送反馈信息
                                AsyncHttpClient client = new AsyncHttpClient();
                                String url = AppNetConfig.FEEDBACK;
                                RequestParams params = new RequestParams();
                                params.put("department", department);
                                params.put("content", content);
                                client.post(url, params, new AsyncHttpResponseHandler()
                                {
                                    @Override
                                    public void onSuccess(String content)
                                    {
                                        UIUtils.toast("发送反馈信息成功", false);

                                    }

                                    @Override
                                    public void onFailure(Throwable error, String content)
                                    {
                                        UIUtils.toast("发送反馈信息失败", false);

                                    }
                                });
                            }
                        })
                        .setNegativeButton("取消", null)
                        .show();

            }
        });
    }

33-分享给好友

1. 常用的分享框架

1.常用的分享功能实现的框架

http://mob.com/

https://www.umeng.com/

2.sharesdk说明:

ShareSDK是一种社会化分享组件,为iOS、Android、WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台。
支持包括QQ、微信、新浪微博、腾讯微博、开心网、人人网、豆瓣、网易微博、搜狐微博、facebook、twitter、google+等国内外40多家的主流社交平台,帮助开发者轻松实现社会化分享、登录、关注、获得用户资料、获取好友列表等主流的社会化功能,强大的统计分析管理后台,可以实时了解用户、信息流、回流率、传播效率等数据,有效地指导移动APP的日常运营与推广,同时为APP引入更多的社会化流量。

2. 如何集成sharesdk

1.进入官网http://mob.com/,注册或登录

2.下载之前,先创建一个应用,并获取自动生成的key。

key:19871766f26ac

3.下载ShareSDK for Android,同时需要的话,还可以下载官方的demo源码这里根据需要选择合适的社交平台。

4.接着按照快速集成指南完成配置

第一步:使快速工具进行集成
解压后,进入ShareSDK解压目录,打开“Share SDK for Android”目录,可以找到“QuickIntegrater.jar”,这个就是快速集成ShareSDK的工具

window下:
首先确定您已经安装了JDK,并且正确配置了JAVA_HOME和PATH系统变量,此时您可以双击QuickIntegrater启动程序

如果不能正常双击启动,还可以在命令行执行:
当前目录下,shift+右键打开cmd命令行执行如下命令:

javaw -jar QuickIntegrater.jar

根据项目的AndroidMenifest.xml和Gradle文件正确输入项目的名称和包名,勾选需要的集成的平台,然后点击“确定”。

QuickIntegrater会自行产生一个文件夹,(如上)复制此文件夹中所有文件到您的项目中覆盖即可。

第二步:配置AndroidManifest.xml

1、添加权限

<uses-permission android:name="android.permission.GET_TASKS" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
 <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
 <!-- 蓝牙分享所需的权限 -->
 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

2、添加activity信息

<activity
 android:name="com.mob.tools.MobUIShell"
 android:theme="@android:style/Theme.Translucent.NoTitleBar"
 android:configChanges="keyboardHidden|orientation|screenSize"
 android:screenOrientation="portrait"
 android:windowSoftInputMode="stateHidden|adjustResize" >


 <intent-filter>
 <data android:scheme="tencent100371282" />
 <action android:name="android.intent.action.VIEW" />
 <category android:name="android.intent.category.BROWSABLE" />
 <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>


 <!-- 调用新浪原生SDK,需要注册的回调activity -->
 <intent-filter>
 <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
 <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
 </activity>

3、如果您集成了微信,易信,支付宝还需要添加下面回调的activity处理;
(集成了哪个,就添加哪个的声明)

<!--微信分享回调 -->
 <activity
 android:name=".wxapi.WXEntryActivity"
 android:theme="@android:style/Theme.Translucent.NoTitleBar"
 android:configChanges="keyboardHidden|orientation|screenSize"
 android:exported="true"
 android:screenOrientation="portrait" /> 


<!--易信分享回调 -->
 <activity
 android:name=".yxapi.YXEntryActivity"
 android:theme="@android:style/Theme.Translucent.NoTitleBar"
 android:configChanges="keyboardHidden|orientation|screenSize"
 android:exported="true"
 android:screenOrientation="portrait" />


 <!-- 支付宝分享回调 -->
<activity
 android:name=".apshare.ShareEntryActivity"
 android:theme="@android:style/Theme.Translucent.NoTitleBar"
 android:configChanges="keyboardHidden|orientation|screenSize"
 android:exported="true"/>

4、替换mob后台申请的Appkey与各个平台申请的key

注意:这里提到我们需要在新浪微博平台提供一个应用,在这里做好配置。这样分享就会显示来自于比如“尚硅谷”。如果不写呢,这里发现也提供了默认的值,比如会显示来自于sharesdk.真正工作的时候,项目中要替换掉,去微博去注册。

第三步:添加分享代码

在您程序启动的时候添加初始化代码(注:不要等调用ShareSDK功能之前才初始化)

ShareSDK.initSDK(this);

在您的代码中调用此方法,即可打开一键分享功能进行分享

private void showShare() {
 OnekeyShare oks = new OnekeyShare();
//关闭sso授权
oks.disableSSOWhenAuthorize();
// title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用
oks.setTitle(getResources().getString(R.string.app_name));
// titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用
oks.setTitleUrl("http://www.atguigu.com");
// text是分享文本,所有平台都需要这个字段
oks.setText("世界上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离;\n" +
        "     世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己;\n" +
        "     世界上最真情的相依,是你在try我在catch。无论你发神马脾气,我都默默承受,静静处理。到那时,再来期待我们的finally。");
//分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
//oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片

// url仅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://www.atguigu.com");
// comment是我对这条分享的评论,仅在人人网和QQ空间使用
oks.setComment("word妈呀,精辟的不要不要的!");
// site是分享此内容的网站名称,仅在QQ空间使用
oks.setSite(getResources().getString(R.string.app_name));
// siteUrl是分享此内容的网站地址,仅在QQ空间使用
oks.setSiteUrl("http://www.atguigu.com");

// 启动分享GUI
oks.show(this.getActivity());


 }

相关文章

网友评论

      本文标题:P2PInvest笔记04

      本文链接:https://www.haomeiwen.com/subject/fegyoftx.html