默认情况下,我无法让用户遵循uid,有人可以检查我的代码以查看我做错了什么吗?
实时使用Firebase 我输入了uid,但应用程序未遵循默认用户,该如何解决呢? 代码->
private void salvarSeguidor(Usuario uLogado, Usuario uAmigo){
/*
* seguidores
* id_usuario_selecionado (id amigo)
* id_usuario_logado (id usuario logado)
* dados logado
* */
HashMap<String, Object> dadosUsuarioLogado = new HashMap<>();
dadosUsuarioLogado.put("nome", uLogado.getNome() );
dadosUsuarioLogado.put("caminhoFoto", uLogado.getCaminhoFoto() );
DatabaseReference seguidorRef = seguidoresRef
.child( "4AI1UzwgdTVJhFERoVeWxlXeAh52" )
.child( uLogado.getId() );
seguidorRef.setValue( dadosUsuarioLogado );
//Alterar botao acao para seguindo
buttonAcaoPerfil.setText("Seguindo");
buttonAcaoPerfil.setOnClickListener(null);
//Incrementar seguindo do usuário logado
int seguindo = uLogado.getSeguindo() + 1;
HashMap<String, Object> dadosSeguindo = new HashMap<>();
dadosSeguindo.put("seguindo", seguindo );
DatabaseReference usuarioSeguindo = usuariosRef
.child( uLogado.getId() );
usuarioSeguindo.updateChildren( dadosSeguindo );
//Incrementar seguidores do amigo
int seguidores = uAmigo.getSeguidores() + 1;
HashMap<String, Object> dadosSeguidores = new HashMap<>();
dadosSeguidores.put("seguidores", seguidores );
DatabaseReference usuarioSeguidores = usuariosRef
.child( uAmigo.getId() );
usuarioSeguidores.updateChildren( dadosSeguidores );
}
全码活动Android应用
public class PerfilAmigoActivity extends AppCompatActivity {
private Usuario usuarioSelecionado;
private Usuario usuarioLogado;
private Button buttonAcaoPerfil;
private CircleImageView imagePerfil;
private TextView textPublicacoes, textSeguidores, textSeguindo;
private GridView gridViewPerfil;
private AdapterGrid adapterGrid;
private DatabaseReference firebaseRef;
private DatabaseReference usuariosRef;
private DatabaseReference usuarioAmigoRef;
private DatabaseReference usuarioLogadoRef;
private DatabaseReference seguidoresRef;
private DatabaseReference postagensUsuarioRef;
private ValueEventListener valueEventListenerPerfilAmigo;
private String idUsuarioLogado;
private List<Postagem> postagens;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_perfil_amigo);
//Configurações iniciais
firebaseRef = ConfiguracaoFirebase.getFirebase();
usuariosRef = firebaseRef.child("usuarios");
seguidoresRef = firebaseRef.child("seguidores");
idUsuarioLogado = UsuarioFirebase.getIdentificadorUsuario();
//Inicializar componentes
inicializarComponentes();
//Configura toolbar
Toolbar toolbar = findViewById(R.id.toolbarPrincipal);
toolbar.setTitle("Pefil");
setSupportActionBar( toolbar );
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_black_24dp);
//Recuperar usuario selecionado
Bundle bundle = getIntent().getExtras();
if( bundle != null ){
usuarioSelecionado = (Usuario) bundle.getSerializable("usuarioSelecionado");
//Configurar referencia postagens usuario
postagensUsuarioRef = ConfiguracaoFirebase.getFirebase()
.child("postagens")
.child( usuarioSelecionado.getId() );
//Configura nome do usuário na toolbar
getSupportActionBar().setTitle( usuarioSelecionado.getNome() );
//Recuperar foto do usuário
String caminhoFoto = usuarioSelecionado.getCaminhoFoto();
if( caminhoFoto != null ){
Uri url = Uri.parse( caminhoFoto );
Glide.with(PerfilAmigoActivity.this)
.load( url )
.into( imagePerfil );
}
}
//Inicializar image loader
inicializarImageLoader();
//Carrega as fotos das postagens de um usuário
carregarFotosPostagem();
//Abre a foto clicada
gridViewPerfil.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Postagem postagem = postagens.get( position );
Intent i = new Intent(getApplicationContext(), VisualizarPostagemActivity.class );
i.putExtra("postagem", postagem );
i.putExtra("usuario", usuarioSelecionado );
startActivity( i );
}
});
}
/**
* Instancia a UniversalImageLoader
*/
public void inicializarImageLoader() {
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(this)
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024)
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(100)
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
.build();
ImageLoader.getInstance().init( config );
}
public void carregarFotosPostagem(){
//Recupera as fotos postadas pelo usuario
postagens = new ArrayList<>();
postagensUsuarioRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Configurar o tamanho do grid
int tamanhoGrid = getResources().getDisplayMetrics().widthPixels;
int tamanhoImagem = tamanhoGrid / 3;
gridViewPerfil.setColumnWidth( tamanhoImagem );
List<String> urlFotos = new ArrayList<>();
for( DataSnapshot ds: dataSnapshot.getChildren() ){
Postagem postagem = ds.getValue( Postagem.class );
postagens.add( postagem );
urlFotos.add( postagem.getCaminhoFoto() );
//Log.i("postagem", "url:" + postagem.getCaminhoFoto() );
}
//Configurar adapter
adapterGrid = new AdapterGrid(getApplicationContext(), R.layout.grid_postagem, urlFotos );
gridViewPerfil.setAdapter( adapterGrid );
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void recuperarDadosUsuarioLogado(){
usuarioLogadoRef = usuariosRef.child( idUsuarioLogado );
usuarioLogadoRef.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Recupera dados de usuário logado
usuarioLogado = dataSnapshot.getValue( Usuario.class );
/* Verifica se usuário já está seguindo
amigo selecionado
*/
verificaSegueUsuarioAmigo();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
);
}
private void verificaSegueUsuarioAmigo(){
DatabaseReference seguidorRef = seguidoresRef
.child( usuarioSelecionado.getId() )
.child( idUsuarioLogado );
seguidorRef.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if( dataSnapshot.exists() ){
//Já está seguindo
Log.i("dadosUsuario", ": Seguindo" );
habilitarBotaoSeguir( true );
}else {
//Ainda não está seguindo
Log.i("dadosUsuario", ": seguir" );
habilitarBotaoSeguir( false );
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
);
}
private void habilitarBotaoSeguir( boolean segueUsuario ){
if ( segueUsuario ){
buttonAcaoPerfil.setText("Seguindo");
}else {
buttonAcaoPerfil.setText("Seguir");
//Adiciona evento para seguir usuário
buttonAcaoPerfil.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Salvar seguidor
salvarSeguidor(usuarioLogado, usuarioSelecionado);
}
});
}
}
private void salvarSeguidor(Usuario uLogado, Usuario uAmigo){
/*
* seguidores
* id_usuario_selecionado (id amigo)
* id_usuario_logado (id usuario logado)
* dados logado
* */
HashMap<String, Object> dadosUsuarioLogado = new HashMap<>();
dadosUsuarioLogado.put("nome", uLogado.getNome() );
dadosUsuarioLogado.put("caminhoFoto", uLogado.getCaminhoFoto() );
DatabaseReference seguidorRef = seguidoresRef
.child( "4AI1UzwgdTVJhFERoVeWxlXeAh52" )
.child( uLogado.getId() );
seguidorRef.setValue( dadosUsuarioLogado );
//Alterar botao acao para seguindo
buttonAcaoPerfil.setText("Seguindo");
buttonAcaoPerfil.setOnClickListener(null);
//Incrementar seguindo do usuário logado
int seguindo = uLogado.getSeguindo() + 1;
HashMap<String, Object> dadosSeguindo = new HashMap<>();
dadosSeguindo.put("seguindo", seguindo );
DatabaseReference usuarioSeguindo = usuariosRef
.child( uLogado.getId() );
usuarioSeguindo.updateChildren( dadosSeguindo );
//Incrementar seguidores do amigo
int seguidores = uAmigo.getSeguidores() + 1;
HashMap<String, Object> dadosSeguidores = new HashMap<>();
dadosSeguidores.put("seguidores", seguidores );
DatabaseReference usuarioSeguidores = usuariosRef
.child( uAmigo.getId() );
usuarioSeguidores.updateChildren( dadosSeguidores );
}
@Override
protected void onStart() {
super.onStart();
//Recuperar dados do amigo selecionado
recuperarDadosPerfilAmigo();
//Recuperar dados usuario logado
recuperarDadosUsuarioLogado();
}
@Override
protected void onStop() {
super.onStop();
usuarioAmigoRef.removeEventListener( valueEventListenerPerfilAmigo );
}
private void recuperarDadosPerfilAmigo(){
usuarioAmigoRef = usuariosRef.child( usuarioSelecionado.getId() );
valueEventListenerPerfilAmigo = usuarioAmigoRef.addValueEventListener(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Usuario usuario = dataSnapshot.getValue( Usuario.class );
String postagens = String.valueOf( usuario.getPostagens() );
String seguindo = String.valueOf( usuario.getSeguindo() );
String seguidores = String.valueOf( usuario.getSeguidores() );
//Configura valores recuperados
textPublicacoes.setText( postagens );
textSeguidores.setText( seguidores );
textSeguindo.setText( seguindo );
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
);
}
private void inicializarComponentes(){
imagePerfil = findViewById(R.id.imagePerfil);
gridViewPerfil = findViewById(R.id.gridViewPerfil);
buttonAcaoPerfil = findViewById(R.id.buttonAcaoPerfil);
textPublicacoes = findViewById(R.id.textPublicacoes);
textSeguidores = findViewById(R.id.textSeguidores);
textSeguindo = findViewById(R.id.textSeguindo);
buttonAcaoPerfil.setText("Carregando");
}
@Override
public boolean onSupportNavigateUp() {
finish();
return false;
}
}