友盟详情见 https://blog.csdn.net/aijaijgnaw/article/details/84203936

分包

友盟第三方登录

MyApp(Application)
package com.umeng.soexample.app;

import android.app.Application;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;

public class MyApp extends Application {

@Override
public void onCreate() {super.onCreate();UMConfigure.init(this,"5a12384aa40fa3551f0001d1","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//打开日志UMConfigure.setLogEnabled(true);PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");UMShareAPI.get(this);
}

}
注意:要在清单文件中添加

MainActivity

找控件

设置监听

点击事件

设置登录监听
UMAuthListener umAuthListener = new UMAuthListener() {

    @Overridepublic void onStart(SHARE_MEDIA share_media) {}@Overridepublic void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {//Toast.makeText(MainActivity.this,map.toString(),Toast.LENGTH_SHORT).show();获取到值(把头像和昵称传入第二个页面)Map<String, String> login = map;String screen_name = login.get("screen_name");String iconurl = login.get("iconurl");Intent intent = new Intent(MainActivity.this,TwoActivity.class);intent.putExtra("nick_name",screen_name);intent.putExtra("iconurl",iconurl);startActivity(intent);}@Overridepublic void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {}@Overridepublic void onCancel(SHARE_MEDIA share_media, int i) {}
};

如果需要用QQ登录 要写onActivityResult
//登录QQ使用
@Override

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

Ok网络请求
package com.umeng.soexample.net;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpNet {

private AccessData accessData;
public OkHttpNet(){}
public OkHttpNet get(String path){OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().get().url(path).build();okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException {//网络请求成功后 得到所有String string = response.body().string();accessData.Data(string);}});return this;
}
public interface AccessData{void Data(String s);
}
public void setAccessData(AccessData accessData) {this.accessData = accessData;
}

}
登录MVP
MainActivity实现LoginView接口

实现接口后会写入接口内的方法

MainActivity中写入P层

CallBack接口

Model层
package com.umeng.soexample.model;

import com.google.gson.Gson;
import com.umeng.soexample.bean.LoginBean;
import com.umeng.soexample.callback.LoginCallBack;
import com.umeng.soexample.net.OkHttpNet;

public class LoginModel {

public void login(String mobile, String password, final LoginCallBack loginCallBack){String data = "http://www.zhaoapi.cn/user/login?mobile="+mobile+"&password="+password;OkHttpNet okHttpNet = new OkHttpNet();okHttpNet.get(data).setAccessData(new OkHttpNet.AccessData() {@Overridepublic void Data(String s) {Gson gson = new Gson();LoginBean loginBean = gson.fromJson(s,LoginBean.class);if(loginBean.getCode().equals("0")){loginCallBack.onLoginSuccess("登陆成功");//跳转}else{loginCallBack.onLoginFailure("登录失败");}}});
}

}
View层

Presenter层
package com.umeng.soexample.presenter;

import com.umeng.soexample.callback.LoginCallBack;
import com.umeng.soexample.model.LoginModel;
import com.umeng.soexample.view.LoginView;

public class LoginPresenter {

private LoginView loginView;
private final LoginModel loginModel;public LoginPresenter(LoginView loginView) {this.loginView = loginView;loginModel = new LoginModel();
}
public void login(String mobile,String password){loginModel.login(mobile, password, new LoginCallBack() {@Overridepublic void onLoginSuccess(String result) {loginView.onSuccess(result);}@Overridepublic void onLoginFailure(String msg) {loginView.onFailure(msg);}});
}

}

TwoActivity中
接收第三方登录成功后传过来的值并展示


实现V层后会有两个方法(成功和失败)
@Override
public void showSuccess(final List<ShowBean.DataBean> list) {

 //成功后更换线程runOnUiThread(new Runnable() {@Overridepublic void run() {//展示适配器adapter = new ShowAdapter(TwoActivity.this,list);//设置适配器recyclerView.setAdapter(adapter);//瀑布流展示recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));adapter.setOnRecyclerViewItemClick(new ShowAdapter.OnRecyclerViewItemClick() {@Overridepublic void onItemClick(View view, int position) {Intent intent = new Intent(TwoActivity.this,ThreeActivity.class);intent.putExtra("image",list.get(position).getThumbnail_pic_s());startActivity(intent);}});}});
}

点击添加和删除

@Override
public void onClick(View v) {switch (v.getId()){case R.id.bt_add:adapter.insert(1);break;case R.id.bt_del:adapter.del(1);break;}
}

设置适配器

package com.umeng.soexample.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;
import com.umeng.soexample.R;
import com.umeng.soexample.bean.ShowBean;

import java.util.List;

public class ShowAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context context;
List<ShowBean.DataBean> list;public ShowAdapter(Context context, List<ShowBean.DataBean> list) {this.context = context;this.list = list;
}@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view = LayoutInflater.from(context).inflate(R.layout.recycler_item, viewGroup, false);MyViewHolder holder = new MyViewHolder(view);return holder;
}@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int i) {MyViewHolder holder = (MyViewHolder) viewHolder;holder.tv_text.setText(list.get(i).getTitle());Picasso.with(context).load(list.get(i).getThumbnail_pic_s()).into(holder.iv_image);
}@Override
public int getItemCount() {return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{private final TextView tv_text;private final ImageView iv_image;public MyViewHolder(@NonNull View itemView) {super(itemView);tv_text = itemView.findViewById(R.id.tv_title);iv_image = itemView.findViewById(R.id.iv_image);//设置点击事件if(onRecyclerViewItemClick != null){itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//调用点击条目的接口onRecyclerViewItemClick.onItemClick(v,getAdapterPosition());}});}}}
//添加
public void insert(int position){ShowBean.DataBean dataBean = new ShowBean.DataBean();dataBean.setTitle("芭蕾美图");dataBean.setThumbnail_pic_s("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1010551629,632409382&fm=200&gp=0.jpg");list.add(position,dataBean);notifyItemInserted(position);}
//删除
public void del(int position){if(position>list.size()-1){Toast.makeText(context,"最后一条了",Toast.LENGTH_SHORT).show();return;}else{list.remove(position);notifyItemRemoved(position);}}
//点击条目的接口
public interface OnRecyclerViewItemClick{void onItemClick(View view,int position);
}
private OnRecyclerViewItemClick onRecyclerViewItemClick;public void setOnRecyclerViewItemClick(OnRecyclerViewItemClick onRecyclerViewItemClick) {this.onRecyclerViewItemClick = onRecyclerViewItemClick;
}

}

展示数据
MVP

Model层
package com.umeng.soexample.model;

import com.google.gson.Gson;
import com.umeng.soexample.bean.ShowBean;
import com.umeng.soexample.callback.ShowCallBack;
import com.umeng.soexample.net.OkHttpNet;

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

public class ShowModel {

String data = "http://www.xieast.com/api/news/news.php";
public void show(final ShowCallBack<List> showCallBack){OkHttpNet okHttpNet = new OkHttpNet();okHttpNet.get(data).setAccessData(new OkHttpNet.AccessData() {@Overridepublic void Data(String s) {Gson gson = new Gson();ShowBean showBean = gson.fromJson(s,ShowBean.class);List<ShowBean.DataBean> data = showBean.getData();if(showBean.getCode() == 1){showCallBack.onShowSuccess(data);}else{showCallBack.onShowFailure("展示失败");}}});
}

}
View层

Presenter层
package com.umeng.soexample.presenter;

import com.umeng.soexample.bean.ShowBean;
import com.umeng.soexample.callback.ShowCallBack;
import com.umeng.soexample.model.ShowModel;
import com.umeng.soexample.view.ShowView;

import java.util.List;

public class ShowPresenter {
private ShowView showView;
private final ShowModel showModel;

public ShowPresenter(ShowView showView) {this.showView = showView;showModel = new ShowModel();
}
public void show(){showModel.show(new ShowCallBack<List>() {@Overridepublic void onShowSuccess(List<ShowBean.DataBean> list) {showView.showSuccess(list);}@Overridepublic void onShowFailure(String msg) {showView.failSuccess(msg);}});
}

}
ThreeActivity中接收传过来的图片 及属性动画
package com.umeng.soexample.activity;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import com.squareup.picasso.Picasso;
import com.umeng.soexample.R;

public class ThreeActivity extends AppCompatActivity {

private ImageView start_image;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_three);start_image = findViewById(R.id.start_image);Intent intent = getIntent();//接收到图片String image = intent.getStringExtra("image");//设置图片Picasso.with(ThreeActivity.this).load(image).into(start_image);start_image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//平移 渐变ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(start_image,"translationX",0f,200f);ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(start_image,"alpha",0f,1f);AnimatorSet animatorSet = new AnimatorSet();animatorSet.playTogether(objectAnimator,objectAnimator1);animatorSet.setDuration(2000);animatorSet.start();}});
}

}

友盟登陆传值+OkHttp+recyclerview展示瀑布流+跳转Intent传值+属性动画相关推荐

  1. RecyclerView实现瀑布流,图片自适应高度

    话不多说,先上效果图 对于RecyclerView,相信大家都不陌生了,这个集listView,GridView,瀑布流效果与一身强大控件,渐渐地渗透在每个App.... 还是回到正题,如何让Recy ...

  2. SwipeRefreshLayout+CardView+RecyclerView 精美瀑布流效果

    博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载.本文由博主 威威喵 原创,请多支持与指教. 本文首发于此   博主:威威喵  |  博客主页:https://blog.csdn.net/ ...

  3. 友盟登陆 QQ授权2002 应用未授权

    今天在升级友盟到9.4.4时 需要连推送 登陆等一并升级到7以上 但是集成完后  QQ登陆报错,一直2002 先检查项目中是不是集成了 implementation files('libs/open_ ...

  4. RecyclerView StaggeredGridLayoutManager瀑布流实现中遇到的问题

    1.下面的代码主要是用于布局错乱后,自动修复,以及防止item左右交换的问题.在我遇到的问题当中,如果只setGapStrategy,会导致列表往回滑动时,顶部出现空白的问题.所以需要开启系统自动计算 ...

  5. Android RecyclerView 实现瀑布流

    Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等 瀑布流也是个常用的显示控件了,但是在使用时经常遇到一些问题,比如滑动回顶部后出现空隙.item在滑动时乱跳 ...

  6. 【RecyclerView】 五、RecyclerView 布局 ( 瀑布流 | 交错网格局管理器 StaggeredGridLayoutManager )

    文章目录 一.交错网格局管理器 StaggeredGridLayoutManager ( 瀑布流 ) 二.交错网格局管理器默认设置 三.交错网格局管理器水平方向设置 四.完整代码示例 五.Recycl ...

  7. android 水平方向瀑布流,Android RecyclerView(瀑布流)水平/垂直方向分割线

     Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...

  8. 使用RecyclerView实现瀑布流

    准备工作 添加网络权限,在此项目中用于获取网络图片 添加Glide依赖,用于加载图片 启用dataBinding,也可不用dataBinding,这里主要是练习一下 implementation 'c ...

  9. 使用RecyclerView实现瀑布流,仿照小红书,解决顶部留白、卡顿等问题

    一.最终效果: 二.工程结构框架: 三.核心实现: (1).实现RecyclerView控件的适配器类 主要就是实现下面三个函数的重载: @NonNull@Overridepublic Recycle ...

最新文章

  1. java 不可修改的集合对象_[改善Java代码]asList方法产生的List对象不可更改
  2. ubuntu ???????????? no permissions 问题解决
  3. PO/BO/VO/DTO/POJO/DAO/DO
  4. comparator比较器用法_汽车三元催化器堵塞咋办?不拆不换,用这招清理干净、动力猛如虎...
  5. ROS配置分布式通信
  6. 机器学习、深度学习经典课程
  7. linux dstat,dstat 用法详解
  8. 51单片机实现浮点数四则运算计算器(C语言的偏软硬件实现)
  9. Creator Kit: Beginner Code Unity学习记录 (1)
  10. 复化梯形公式matlab实验报告_复化梯形公式matlab
  11. 无限渗透实战(2)--绕过认证上校园网
  12. 阿里云服务器安装图形化界面(CentOS)
  13. commvault oracle容灾,解析Commvault云管理解决方案如何实现数据的一体化管理
  14. 【程序员情商up】说话的智慧
  15. nginx缓冲区链表chain
  16. 与 vmx86 驱动程序的版本不匹配解决方法
  17. Golang zap 快速上手
  18. Activiti6--入门学习--结束事件
  19. Typora 1.3.8 安装激活教程
  20. chr在c语言中的用法,丰田C-HR灯光使用方法,灯光开关图解说明

热门文章

  1. VMware vSAN 6.7实战(六)配置vSAN存储策略
  2. Linux学习总结(61)——Ansible 快速入门学习
  3. 技术人员如何创业《一》- 产品及想法
  4. android 客户端bks,Keytools Https双向认证(Android通用)
  5. java 单例 并发_完美的单例实现(The Perfect Singleton)
  6. 《树莓派实战秘籍》——1.14 技巧14初学GPIO
  7. 让大家信任自己,做个行为和语言上都没黑盒子的技术人员(转)
  8. 完成蓝蜂浏览器的框架重构
  9. trunk配置功能详解
  10. MSI/MSI-X Capability结构 (转)