MVP简单登录和第三方授权登录和分享

第三方登录和分享首先我用的是友盟,在友盟上大家需要第三方的东西很全,所以大家可以注册一个试着玩一玩,

做第三方首先先下载SDK,需要把上面的资源文件导到你需要的项目上,还有一些依赖,权限什么的我让大家看一下我的

 

 

这是qq用到的一些权限,写第三方qq时包名啥的自己随便起,但是微信就不行了

如果用微信的话,大家可以在友盟上看看!!

接下来说我的项目

mainactivity布局

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

    <EditText
        android:id="@+id/edit1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入正确的手机号"/>
    <EditText
        android:id="@+id/edit2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入正确的密码"/>
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <CheckBox
            android:text="自动登录"
            android:id="@+id/zidong"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <CheckBox
            android:text="记住密码"
            android:id="@+id/jizhu"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
    <Button
        android:id="@+id/login"
        android:text="登录"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
    <Button
        android:id="@+id/shouquan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="授权登录"/>

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

        <ImageView
            android:id="@+id/touxiang"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true" />

    </RelativeLayout>

</LinearLayout>

这是MVP需要的格式 

主页面的代码

package com.example.zk2;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.zk2.bean.User;
import com.example.zk2.presenter.IPresenterImpl;
import com.example.zk2.view.MyView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA;
import java.util.Map;
import java.util.Set;

public class MainActivity<T> extends AppCompatActivity implements MyView<T>, View.OnClickListener {

    private static final String TAG = "MainActivity";
    private static final String APP_ID = "1105602574";//官方获取的APPID

    private String mUrl = "http://www.xieast.com/api/user/login.php?";
    private EditText edit1;
    private EditText edit2;
    private CheckBox zidong;
    private CheckBox jizhu;
    private Button login;
    private IPresenterImpl iPresenter;
    private SharedPreferences sp;
    private Button shouquan;
    private ImageView touxiang;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    @Override
    public void onClick(View v) {
        String name = edit1.getText().toString();
        String pass = edit2.getText().toString();
        if (name.isEmpty() || pass.isEmpty()) {
            Toast.makeText(this, "电话或密码请填写完整", Toast.LENGTH_SHORT).show();
            return;
        } else {
            iPresenter.startRequest(mUrl, name, pass);
        }
    }
    private void initView() {
        edit1 = (EditText) findViewById(R.id.edit1);
        edit2 = (EditText) findViewById(R.id.edit2);
        zidong = (CheckBox) findViewById(R.id.zidong);
        jizhu = (CheckBox) findViewById(R.id.jizhu);
        login = (Button) findViewById(R.id.login);
        shouquan = findViewById(R.id.shouquan);
        shouquan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UMShareAPI.get(MainActivity.this).getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, authListener);
            }
        });
        login.setOnClickListener(this);
        iPresenter = new IPresenterImpl(this);
        sp = getSharedPreferences("login", MODE_PRIVATE);
        if (sp.getString("name", "") != null) {
            String name = sp.getString("name", "");
            String pass = sp.getString("pass", "");
            boolean ji = sp.getBoolean("jizhu", false);
            edit1.setText(name);
            edit2.setText(pass);
            jizhu.setChecked(ji);
        }
        if (sp.getBoolean("zidong", false)) {
            boolean zi = sp.getBoolean("zidong", false);
            zidong.setChecked(zi);
            Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
            startActivity(new Intent(MainActivity.this, TwoActivity.class));
        }
        touxiang = (ImageView) findViewById(R.id.touxiang);
        touxiang.setOnClickListener(this);
    }
    @Override
    public void success(T data) {
        User user = (User) data;
        String code = String.valueOf(user.getCode());
        if (code.equals("103")) {
            Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
        } else {
            if (jizhu.isChecked()) {
                String name = edit1.getText().toString();
                String pass = edit2.getText().toString();
                SharedPreferences.Editor edit = sp.edit();
                edit.putString("name", name);
                edit.putString("pass", pass);
                edit.putBoolean("jizhu", true);
                edit.commit();
            } else {
                SharedPreferences.Editor edit = sp.edit();
                edit.clear();
                edit.commit();
            }
            if (zidong.isChecked()) {
                SharedPreferences.Editor edit = sp.edit();
                edit.putBoolean("zidong", true);
                edit.commit();
                Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
            } else {
                SharedPreferences.Editor edit = sp.edit();
                edit.putBoolean("zidong", false);
                edit.commit();
            }
            Toast.makeText(this, user.getMsg(), Toast.LENGTH_SHORT).show();
            startActivity(new Intent(MainActivity.this, TwoActivity.class));
        }
    }
    @Override
    public void error(String error) {
        Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (iPresenter != null) {
            iPresenter.onDeach();
        }
    }
    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) {

            Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
            Set<String> keySet = data.keySet();
            //得到头像
            String iconurl = new String();
            //得到昵称
            String screenname = new String();
            for (String string : keySet) {
                Log.i("TAG", string);
                if (string.equals("profile_image_url")) {
                    //获取登录的图片
                    iconurl = data.get("profile_image_url");
                    ImageLoader.getInstance().displayImage(iconurl, touxiang);
                }
            }
        }

        /**
         * @desc 授权失败的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

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

        /**
         * @desc 授权取消的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }



}

接下来是两个fragment的点击切换

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

    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></FrameLayout>
    <RadioGroup
        android:id="@+id/rg1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <RadioButton
            android:id="@+id/r1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:text="我的数据"
            android:gravity="center"/>
        <RadioButton
            android:id="@+id/r2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:text="我的名片"
            android:gravity="center"/>

    </RadioGroup>

</LinearLayout>

 切换的代码

package com.example.zk2;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.example.zk2.fragment.Frag_1;
import com.example.zk2.fragment.Frag_2;

import java.util.ArrayList;

public class TwoActivity extends AppCompatActivity implements View.OnClickListener {

    private FrameLayout frame;
    private RadioButton r1;
    private RadioButton r2;
    private RadioGroup rg1;
    private Frag_2 f2;
    private Frag_1 f1;
    private FragmentManager manager;
    private ArrayList<Fragment> list=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        initView();
        initData();
        manager = getSupportFragmentManager();
        manager.beginTransaction().replace(R.id.frame,f1).commit();
    }

    private void initData() {
        f1 = new Frag_1();
        f2 = new Frag_2();
        list.add(f1);
        list.add(f2);
    }

    private void initView() {
        frame = (FrameLayout) findViewById(R.id.frame);
        r1 = (RadioButton) findViewById(R.id.r1);
        r1.setOnClickListener(this);
        r2 = (RadioButton) findViewById(R.id.r2);
        r2.setOnClickListener(this);
        rg1 = (RadioGroup) findViewById(R.id.rg1);
    }

    @Override
    public void onClick(View v) {
        FragmentTransaction transaction = manager.beginTransaction();
        switch (v.getId()){
            case R.id.r1:
                transaction.replace(R.id.frame,f1).commit();
                break;
            case R.id.r2:
                transaction.replace(R.id.frame,f2).commit();
                break;
        }
    }
}

首先第一个fragment

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

    <ListView
        android:id="@+id/listview2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</LinearLayout>

第一个fragment的代码

package com.example.zk2.fragment;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.example.zk2.R;
import com.example.zk2.ThreeActivity;
import com.example.zk2.TwoActivity;
import com.example.zk2.adapter.ListAdapter;
import com.example.zk2.bean.MyBean;
import com.example.zk2.presenter.MyPresenterImpl;
import com.example.zk2.view.DataView;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class Frag_1 extends Fragment implements DataView{
    private ListView listviewaa;
    private List<MyBean.DataBean> list=new ArrayList<>();
    private MyPresenterImpl presenter;
    private String mUrl="http://www.xieast.com/api/news/news.php";
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag_1, container, false);
        initView(v);
        presenter.startRequest(mUrl);
        if (!list.isEmpty()){
            list.clear();
        }
        return v;
    }
    @Override
    public void success(MyBean data) {
        list.addAll(data.getData());
        ListAdapter adapter=new ListAdapter(getActivity(),list);
        listviewaa.setAdapter(adapter);
        listviewaa.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String url = list.get(position).getUrl();
                String s = list.get(position).getThumbnail_pic_s();
                Intent intent=new Intent(getActivity(),ThreeActivity.class);
                intent.putExtra("url",url);
                intent.putExtra("tu",s);
                startActivity(intent);
            }
        });
    }
    @Override
    public void error(String error) {
        Toast.makeText(getActivity(), "异常", Toast.LENGTH_SHORT).show();
    }

    private void initView(View v) {
        listviewaa = (ListView) v.findViewById(R.id.listview2);
        presenter=new MyPresenterImpl(this);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (presenter!=null){
            presenter=null;
        }
    }
}

第二个fragment布局

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

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>
    <Button
        android:id="@+id/tui"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出登录"/>

</LinearLayout>

第二个fragment代码

package com.example.zk2.fragment;

import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.example.zk2.MainActivity;
import com.example.zk2.R;
import com.yzq.zxinglibrary.encode.CodeCreator;

import static android.content.Context.MODE_PRIVATE;

public class Frag_2 extends Fragment implements View.OnClickListener {
    private SharedPreferences mShared;
    private SharedPreferences.Editor mEditor;
    private ImageView image;
    private String contentEtString = "192217961";
    private Button tui;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frag_2, container, false);
        initView(v);
        Bitmap logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
        try {
            //生成二维码需要用到类是CodeCreator
            Bitmap bitmap = CodeCreator.createQRCode(contentEtString, 400, 400, logo);
            image.setImageBitmap(bitmap);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return v;
    }

    private void initView(View v) {
        image = (ImageView) v.findViewById(R.id.image);
        tui = (Button) v.findViewById(R.id.tui);
        tui.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tui:
                Toast.makeText(getActivity(), "臣,退了", Toast.LENGTH_SHORT).show();
                Toast.makeText(getActivity(), "这一退就一会!!", Toast.LENGTH_SHORT).show();
                startActivity(new Intent(getActivity(),MainActivity.class));
                mShared = getActivity().getSharedPreferences("login", MODE_PRIVATE);
                mEditor = mShared.edit();
                mEditor.clear();
                mEditor.commit();
                break;
        }
    }
}

最后点击条目个分享的第三个activity布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ThreeActivity">
    <Button
        android:id="@+id/fenxiang"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="分享"/>
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>

</LinearLayout>

最后点击条目个分享的第三个代码

package com.example.zk2;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;

public class ThreeActivity extends AppCompatActivity implements View.OnClickListener {

    private Button fenxiang;
    private WebView webView;
    private String tu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
        initView();
        Intent intent=getIntent();
        tu = intent.getStringExtra("tu");
        String url = intent.getStringExtra("url");
        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new WebChromeClient());
        webView.loadUrl(url);
    }

    private void initView() {
        fenxiang = (Button) findViewById(R.id.fenxiang);
        webView = (WebView) findViewById(R.id.webView);
        fenxiang.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.fenxiang:
                UMImage umImage = new UMImage(this, tu);
                new ShareAction(ThreeActivity.this).withText("hello").withMedia(umImage).setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.QZONE)
                        //分享的监听
                        .setCallback(shareListener).open();
                break;
        }
    }
    //设置回调监听
    private UMShareListener shareListener = new UMShareListener() {
        /**
         * @descrption 分享开始的回调
         * @param platform 平台类型
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        /**
         * @descrption 分享成功的回调
         * @param platform 平台类型
         */
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(ThreeActivity.this, "成功了", Toast.LENGTH_LONG).show();
        }

        /**
         * @descrption 分享失败的回调
         * @param platform 平台类型
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(ThreeActivity.this, "失败" + t.getMessage(), Toast.LENGTH_LONG).show();
        }

        /**
         * @descrption 分享取消的回调
         * @param platform 平台类型
         */
        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(ThreeActivity.this, "取消了", Toast.LENGTH_LONG).show();
        }
    };
}

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值