Jump to content

Search the Community

Showing results for tags 'android'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 154 results

  1. Boa tarde, estou criando um carrinho de compras onde tem uma recyclerview listando os produtos, ao lado de cada produto tem um campo de quantidade + ou - que teram a função de adicionar e aumentar a quantidade de produto, mas o problema é que quando eu altero a quantidade de um produto automaticamente esta quantidade tambem vai para outras linhas, intercaladas de 10 em 10, sei que isso é porque o recyclerview meio que carrega de 10 em 10 e vai limpando, soque eu nao sei como resolver isso, segue código e abaixo imagem de referencia public class ProdutosCodBarrasAdapter extends RecyclerView.Adapter<ProdutosCodBarrasAdapter.ViewHolderProdutos> { private List<Produto> dados; private List<PedidoItens> dados2; public Button actionProdMais; public Button actionProdMenos; public TextView txtQtd; private TabelaPreco tabelaPreco; private TabelaPrecoProdutoRepositorio tabelaPrecoProdutoRepositorio; public Double varBaseValor; public int varCodProduto; public Double passaQtd; public Produto[] produto; public String varprecoBaseNovoAjuste; public int varCodProdutoExcluir; public int varCodProdutoItemExcluir; private SQLiteDatabase conexao; private DadosOpenHelper dadosOpenHelper; public int varB; public int varC; public int varD; public String varE; public static final String NOME_PREFERENCE = "INFORMACOES_LOGIN_AUTOMATICO"; public int cli_emp_id; public ProdutosCodBarrasAdapter(List<Produto> dados){ this.dados = dados; } @NonNull @Override public ProdutosCodBarrasAdapter.ViewHolderProdutos onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); View view = layoutInflater.inflate(R.layout.linha_carrinho_add, parent,false);//R.layout.linha_produtos, parent,false ViewHolderProdutos holderProdutos = new ViewHolderProdutos(view, parent.getContext()); view.setBackgroundColor(0xFFF0F0F0); return holderProdutos; } @Override public void onBindViewHolder(@NonNull ProdutosCodBarrasAdapter.ViewHolderProdutos holder, int position) { if((dados != null) && (dados.size() > 0)) { DecimalFormat formatoDois = new DecimalFormat("##,###,###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR"))); formatoDois.setMinimumFractionDigits(2); formatoDois.setParseBigDecimal (true); //CARREGAR NA BINDVIEW aqui ele gera de 10 em 10, sempre ir atualizano a lista com as alterações (dados) Produto produto = dados.get(position); holder.listNomeProd.setText(produto.tab_id + " : " + produto.est_descricao_cor + " - " + produto.est_tam + " posição: "+position);//aqui morre //holder.listRefProd.setText(produto.prod_referencia.toString());// varprecoBaseNovoAjuste = new String(formatoDois.format(produto.tab_preco_final)); varB = Integer.parseInt(produto.varCodPed);//codigo do pedido varC = Integer.parseInt(String.valueOf(produto.codigo_prod));//codigo produto varD = Integer.parseInt(String.valueOf(produto.est_id_cor));//codigo da cor varE = String.valueOf(produto.est_tam);//tamanho holder.listPrecoProd.setText(varprecoBaseNovoAjuste);//aqui? holder.listPrecoProd.setText(formatoDois.format(produto.tab_preco_final.toString())); varCodProdutoItemExcluir = produto.prod_id; holder.listPegaCodPedidoItem2.setText(String.valueOf(varCodProdutoItemExcluir)); varBaseValor = produto.tab_preco_final; varCodProduto = produto.prod_id; } } @Override public int getItemCount() { return dados.size(); } public class ViewHolderProdutos extends RecyclerView.ViewHolder implements View.OnClickListener { private TextView listNomeProd; private TextView listPrecoProd; private ImageView idImagen; private TextView txtQtd; private double pegaQtd; private TextView listPegaCodPedidoItem2; public ViewHolderProdutos(@NonNull View itemView, final Context context) { super(itemView); listNomeProd = (TextView) itemView.findViewById(R.id.listNomeProd); listPrecoProd = (TextView) itemView.findViewById(R.id.listPrecoProd); txtQtd = (TextView) itemView.findViewById(R.id.txtQtd); passaQtd = Double.valueOf(txtQtd.getText().toString()); listPegaCodPedidoItem2 = (TextView) itemView.findViewById(R.id.listPegaCodPedidoItem2); actionProdMais = (Button) itemView.findViewById(R.id.actionProdMais); actionProdMais.setOnClickListener(this); actionProdMenos = (Button) itemView.findViewById(R.id.actionProdMenos); actionProdMenos.setOnClickListener(this); //ATUALIZAR ELE NA VIEW // actionProdMenos.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // get position int pos = getAdapterPosition(); // check if item still exists if(pos != RecyclerView.NO_POSITION){ Produto produto = dados.get(pos); Double pegaQtd2 = Double.valueOf(txtQtd.getText().toString()); if(pegaQtd2 > 1.00){pegaQtd2--;} txtQtd.setText(pegaQtd2.toString()); Double pegaPrecoProd2 = pegaQtd2 * varBaseValor; DecimalFormat formatoDois2 = new DecimalFormat("##,###,###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR"))); formatoDois2.setMinimumFractionDigits(2); formatoDois2.setParseBigDecimal (true); listPrecoProd.setText(formatoDois2.format(pegaPrecoProd2).toString()); passaQtd = Double.valueOf(pegaQtd2.toString()); Toast.makeText(v.getContext(), "TAM: " + produto.est_tam + "QTD: " + passaQtd, Toast.LENGTH_SHORT).show(); //ProdutosCodBarrasAdapter.this.notifyItemChanged(pos, "payload " + pos); //Toast.makeText(v.getContext(), "You clicked " + produto.est_tam, Toast.LENGTH_SHORT).show(); } } }); // // actionProdMais.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // get position int pos = getAdapterPosition(); // check if item still exists if(pos != RecyclerView.NO_POSITION){ Produto produto = dados.get(pos); Double pegaQtd = Double.valueOf(txtQtd.getText().toString()); pegaQtd++; txtQtd.setText(pegaQtd.toString()); Double pegaPrecoProd = pegaQtd * varBaseValor; DecimalFormat formatoDois = new DecimalFormat("##,###,###,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR"))); formatoDois.setMinimumFractionDigits(2); formatoDois.setParseBigDecimal (true); listPrecoProd.setText(formatoDois.format(pegaPrecoProd).toString()); passaQtd = Double.valueOf(pegaQtd.toString()); Toast.makeText(v.getContext(), "TAM: " + produto.est_tam + "QTD: " + passaQtd, Toast.LENGTH_SHORT).show(); } } }); // } @Override public void onClick(View view) { switch (view.getId()) { case R.id.actionProdMais: break; case R.id.actionProdMenos: break; default: break; } } } }
  2. Galera, sou novo em desenvolvimento android, porém gostaria de saber se podem me ajudar em meu aplicativo. Basicamente, anexo um arquivo (texto, imagem) em meu app e envio para o Google drive, onde ele cria uma pasta com o nome deste arquivo e realiza o upload dele nesta pasta. Bem, não consigo nem me conectar com o Google drive, tentei já com outras API's e deu certo, alguém pode me ajudar ? Estou uma semana tentando realizar este procedimento rs Tento ver a documentação do Google mesmo, mas é muito confuso. E outros sites tentei mas são versões bem inferiores, ou já é com o Kotlin. Agradeço a ajuda, Rodrigo A.F.
  3. Olá pessoal, meu tablet iniciou um comportamento estranho, após desligar e ligar apareceu uma mensagem do sistema dizendo algo como "O caminho de .com.ugc.android.activitys. está errado", pelo pouco que entendo sei que "activitys" se escreve activities, talvez seja esse o motivo da mensagem. Após isso, todos os apps e tarefas ficam com aquela mensagem de "O aplicativo parou de funcionar". Tentei formatar pelo reset padrão do android e o procedimento ocorre normalmente mas quando ao final, quando o sistema reinicia tudo está como mantes, nada foi formatado, todos os arquivos estão intactos juntamente com o erro. Tentei formatar por aquele reset apertando o power e o volume, coloquei para redefinir para as configurações de fábrica e acontece a mesma coisa de antes, reinicia com tudo igual. Quando conecto no pc e tento alterar algo nos arquivos do tablet pelo pc ele retorna uma mensagem dizendo que o dispositivo foi desconectado, sendo que ainda consigo mexer. Ficarei extremamente agradecido caso alguém que tenha alguma ideia e que possa me dar uma luz. Tablet Multilaser M7 O mesmo desde anúncio: https://www.walmart.com.br/tablet-multilaser-preto-m7-3g-quad-core-camera-wi-fi-tela-hd-7-memoria-8gb-dual-chip-nb223/4280776/pr?utm_source=google-5&amp;utm_medium=sem&amp;utm_campaign=institucional-marca
  4. Boa Noite! Estou iniciando na arte do Android Studio e estou apanhando bastante e venho em busca de ajuda. Tenho um formulário (Activity) de login. 2 campos: login e senha e 1 botão Quando compilo os campos ficam um sobre o outro. Eis o xml <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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" tools:context=".Login"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="LOGON" tools:layout_editor_absoluteX="162dp" tools:layout_editor_absoluteY="16dp" /> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:text="Usuário" tools:layout_editor_absoluteX="83dp" tools:layout_editor_absoluteY="61dp" /> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="textPassword" tools:layout_editor_absoluteX="80dp" tools:layout_editor_absoluteY="129dp" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Login" tools:layout_editor_absoluteX="147dp" tools:layout_editor_absoluteY="201dp" /> </android.support.constraint.ConstraintLayout> E o .java package carcleo.com.cadastrodeclientes; import android.app.Activity; import android.os.Bundle; public class Login extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); } } O que estou errando?
  5. First

    Stickers WhatsApp

    Olá a todos! Ultimamente os famosos Stickers para o WhatsApp entrou em "febre". Estive pesquisando no Google como que eu poderia criar um aplicativo para armazenar os meus Stickers e publicar o app na Play Store, achei alguns conteúdos e acho que entendi como funciona, mais ou menos, mas a questão é que eu não faço a miníma ideia de como publicar o aplicativo. Peço a ajuda de vocês para me instruir nessa questão, se puderem, é claro. Criando adesivos (Stickers) para o WhatsApp https://faq.whatsapp.com/en/android/26000226/?category=5245251 Lá contem algumas informações bem concretas, e possuí um repositório no GitHub onde contém o "aplicativo para stickers de exemplo, pronto para serem publicados em alguma loja, como Google Play Store ou Apple Store". Repositório de adesivos (Stickers) para o WhatsApp - GitHub https://github.com/WhatsApp/stickers Agora a princípio eu tenho a seguinte dúvida, como que eu posso fazer meus próprios adesivos (stickers) e publicar na Google Play Store?! Desde já agradeço o tempo de vocês, deixo o meu muito obrigado.
  6. Pessoal, noa noite. Desenvolvi esse jogo para android e estou divulgando. Já esta disponível para download na loja da google play store. Gostaria da ajuda de vocês para avaliar, é claro, quem puder e quiser Muito obrigado!
  7. Olá sei que não é o caso mas preciso de alguem que faça um app para mim nada muito complicado mas com integração com o meu sql server 2012. app envolve: compra de moedas virtual para o meu game já pre cadastradas pelo gplay e suporte ao cliente. que tenha alertas de app desculpe se não é o local adequado para isso mas estou pesquisando muito e nao sei o trabalho que isso daria mas acredito que não seja um dos mais trabalhosos.
  8. Aprendendo a usar o android studio e seguindo um curso da udacity, importei um projeto do curso e na hora de rodar da esse erro. Já aconteceu com alguém? Alguém sabe como resolver?
  9. Bom dia pessoal, estou quase concluindo um aplicativo, porém estou empacado nessa situação. Fiz um sistema simples de registro e login apenas pra guardar valores do celular no mysql, ele guarda todos os valores certinhos, também fiz um sistema simples de ranking usando Android, MySql e PHP, ele retorna tudo perfeito. Porém quando eu tento fazer o login comparando o usuario e senha do banco de dados pelo android, ele me retorna como valor nulo, sendo que se eu editar o php com usuario e senha, ele retorna no browser os dados referente ao usuário, alguém saberia o por que? Sistema de Registrar: public void registrarConta(View v) { final String nome = profilename.getText().toString(); final String senha = profilepass.getText().toString(); final String email = profileemail.getText().toString(); String id = profileid.getText().toString(); String url = HOST + "/criartapball.php"; if(nome.isEmpty()) { profilename.setError("Digite seu Nome!"); } //else if() else if(senha.isEmpty()) { profilepass.setError("Digite uma Senha!"); } else if(email.isEmpty()) { profileemail.setError("Digite seu Email!"); } else if(id.isEmpty()) { final Future<JsonObject> jsonObjectFuture = Ion.with(registrar.this) .load(url) .setBodyParameter("NOME", nome) .setBodyParameter("SENHA", senha) .setBodyParameter("EMAIL", email) .setBodyParameter("DINHEIRO", "0") .setBodyParameter("RECORDE", "0") .setBodyParameter("CLIQUES", "0") .setBodyParameter("MAIOR_NIVEL", "0") .setBodyParameter("TOTAL_GANHO", "0") .setBodyParameter("REGISTRADO", "1") .asJsonObject() .setCallback(new FutureCallback<JsonObject>() { @Override public void onCompleted(Exception e, JsonObject result) { if(result == null) { Toast.makeText(registrar.this, "Não foi possível! Verifique sua conexão.", Toast.LENGTH_LONG).show(); } else { if (result.get("CREATE").getAsString().equals("OK")) { int idRetornado = Integer.parseInt(result.get("ID").getAsString()); //-------- SISTEMA DE DADOS OFFLINE SALVOS NO CELULAR SharedPreferences settings = getSharedPreferences("GAME_DATA", Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt("TOTAL_GANHO", 0); editor.putInt("DINHEIRO_ATUAL", 0); editor.putInt("CLIQUES_FEITOS", 0); editor.putInt("HIGH_SCORE", 0); editor.putInt("MAIOR_LEVEL", 0); editor.putString("NOME", nome); editor.putString("SENHA", senha); editor.putString("EMAIL", email); editor.putInt("REGISTRADO", 1); editor.putInt("ID_REGISTRO", idRetornado); editor.commit(); Toast.makeText(registrar.this, "Jogador " + nome + " criado com Sucesso! ID: " + idRetornado, Toast.LENGTH_LONG).show(); Log.d(TAG, "Usuário Registrado:>>> " + nome + " - ID: " + idRetornado + " <<<"); startActivity(new Intent(getApplicationContext(), start.class)); } else { Toast.makeText(registrar.this, "Nome já utilizado!", Toast.LENGTH_LONG).show(); } } } }); } } PHP do registro: <?php include "conexaotapball.php"; $nome = $_POST['NOME']; $senha = $_POST['SENHA']; $email = $_POST['EMAIL']; $dinheiro = $_POST['DINHEIRO']; $record = $_POST['RECORDE']; $cliques = $_POST['CLIQUES']; $maior_nivel = $_POST['MAIOR_NIVEL']; $total_ganho = $_POST['TOTAL_GANHO']; $registrado = $_POST['REGISTRADO']; $sql_insert = "INSERT INTO jogadores (NOME, SENHA, EMAIL, DINHEIRO, RECORDE, CLIQUES, MAIOR_NIVEL, TOTAL_GANHO, REGISTRADO) VALUES (:NOME, :SENHA, :EMAIL, :DINHEIRO, :RECORDE, :CLIQUES, :MAIOR_NIVEL, :TOTAL_GANHO, :REGISTRADO)"; $stmt = $PDO->prepare($sql_insert); $stmt->bindParam(':NOME',$nome); $stmt->bindParam(':SENHA',$senha); $stmt->bindParam(':EMAIL',$email); $stmt->bindParam(':DINHEIRO',$dinheiro); $stmt->bindParam(':RECORDE',$record); $stmt->bindParam(':CLIQUES',$cliques); $stmt->bindParam(':MAIOR_NIVEL',$maior_nivel); $stmt->bindParam(':TOTAL_GANHO',$total_ganho); $stmt->bindParam(':REGISTRADO',$registrado); if($stmt->execute()) { $id = $PDO->lastInsertId(); $dados = array("CREATE"=>"OK", "ID"=>$id); } else { $dados = array("CREATE"=>"ERRO"); //echo $dados->getMessage(); } echo json_encode($dados); ?> Sistema de Logar: public void logarConta(View v) { final String nome = profilename.getText().toString(); final String senha = profilepass.getText().toString(); final String url = HOST + "/login.php"; if(nome.isEmpty()) { profilename.setError("Digite seu Nome!"); } else if(senha.isEmpty()) { profilepass.setError("Digite sua Senha!"); } else { final Future<JsonObject> jsonObjectFuture = Ion.with(logar.this) .load(url) .setBodyParameter("NOME", nome) .setBodyParameter("SENHA", senha) .asJsonObject() .setCallback(new FutureCallback<JsonObject>() { @Override public void onCompleted(Exception e, JsonObject result) { //atualizarDados(); if(result == null) { Toast.makeText(logar.this, "Não foi possível! Verifique sua conexão.", Toast.LENGTH_LONG).show(); } else { if (result.get("LOGAR").getAsString().equals("OK")) { JsonObject obj = result.get(result.get("ID").getAsString()).getAsJsonObject(); rankingrecorde r = new rankingrecorde(); r.setID(Integer.valueOf(obj.get("ID").getAsString())); r.setNome(obj.get("NOME").getAsString()); r.setSenha(obj.get("SENHA").getAsString()); r.setEmail(obj.get("EMAIL").getAsString()); r.setDinheiro(obj.get("DINHEIRO").getAsString()); r.setRecord(obj.get("RECORDE").getAsString()); r.setTotal_ganho(obj.get("TOTAL_GANHO").getAsString()); r.setMaior_nivel(obj.get("MAIOR_NIVEL").getAsString()); r.setCliques(obj.get("CLIQUES").getAsString()); r.setRegistrado(obj.get("REGISTRADO").getAsString()); //-------- SISTEMA DE DADOS OFFLINE SALVOS NO CELULAR SharedPreferences settings = getSharedPreferences("GAME_DATA", Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putInt("TOTAL_GANHO", Integer.valueOf(r.getTotal_ganho())); editor.putInt("DINHEIRO_ATUAL", Integer.valueOf(r.getDinheiro())); editor.putInt("CLIQUES_FEITOS", Integer.valueOf(r.getCliques())); editor.putInt("HIGH_SCORE", Integer.valueOf(r.getRecord())); editor.putInt("MAIOR_LEVEL", Integer.valueOf(r.getMaior_nivel())); editor.putString("NOME", r.getNome()); editor.putString("SENHA", r.getSenha()); editor.putString("EMAIL", r.getEmail()); editor.putInt("REGISTRADO", Integer.valueOf(r.getRegistrado())); editor.putInt("ID_REGISTRO", r.getID()); editor.commit(); Toast.makeText(logar.this, "Jogador " + obj.get("NOME").getAsString() + " logado com Sucesso!", Toast.LENGTH_LONG).show(); startActivity(new Intent(getApplicationContext(), start.class)); } else if (result.get("LOGAR").getAsString().equals("NAOEXISTE")) { Toast.makeText(logar.this, "Nome ou senha incorretos!", Toast.LENGTH_LONG).show(); } else { Toast.makeText(logar.this, "Nome já utilizado!", Toast.LENGTH_LONG).show(); } } } }); } } PHP do Login: <?php include "conexaotapball.php"; $host = "localhost"; $db = "id7211556_tapballusers"; $usuario = "id7211556_zotinfotapball"; $senhadb = "tapballthegame"; $con = mysqli_connect($host,$usuario,$senhadb,$db); $nome = "teste"; //$_POST['NOME']; $senha = "teste";// $_POST['SENHA']; $sql_login = "SELECT * FROM jogadores WHERE NOME = '$nome' AND SENHA = '$senha'"; $dados_login = $PDO->query($sql_login); $resultado_login = array(); $result = mysqli_fetch_array(mysqli_query($con,$sql_login)); if(isset($result)) { //$dados = array("LOGAR"=>"OK"); while($jogador = $dados_login->fetch(PDO::FETCH_OBJ)){ $resultado_login[] = array("ID"=>$jogador->ID, "NOME"=>$jogador->NOME, "SENHA"=>$jogador->SENHA, "EMAIL"=>$jogador->EMAIL, "DINHEIRO"=>$jogador->DINHEIRO, "RECORDE"=>$jogador->RECORDE, "CLIQUES"=>$jogador->CLIQUES, "MAIOR_NIVEL"=>$jogador->MAIOR_NIVEL, "TOTAL_GANHO"=>$jogador->TOTAL_GANHO, "REGISTRADO"=>$jogador->REGISTRADO,"LOGAR"=>"OK"); } } else { $resultado_login = array("LOGAR"=>"NAOEXISTE"); } echo json_encode($resultado_login); //echo json_encode($dados); mysqli_close($con); ?> Sistema do Ranking: private void listaRanking(){ String url = HOST + "/rankrecorde.php"; Ion.with(getBaseContext()) .load(url) .asJsonArray() .setCallback(new FutureCallback<JsonArray>() { @Override public void onCompleted(Exception e, JsonArray result) { if(result == null) { Toast.makeText(rankrecorde.this, "Não foi possível! Verifique sua conexão.", Toast.LENGTH_LONG).show(); } else { for (int i = 0; i < result.size(); i++) { JsonObject obj = result.get(i).getAsJsonObject(); rankingrecorde r = new rankingrecorde(); r.setNome(obj.get("NOME").getAsString()); r.setRecord(obj.get("RECORDE").getAsString()); lista.add(r); } rankAdapter.notifyDataSetChanged(); } } }); } PHP que faz a função do ranking: <?php include "conexaotapball.php"; $sql_read = "SELECT * FROM jogadores ORDER BY RECORDE * 1 DESC LIMIT 10"; //$sql_readrecord = "SELECT NAME, RECORDE FROM jogadores ORDER BY RECORDE DESC"; $dados = $PDO->query($sql_read); //$dados = $PDO->query($sql_readrecord); $resultado = array(); while($jogador = $dados->fetch(PDO::FETCH_OBJ)){ $resultado[] = array("ID"=>$jogador->ID, "NOME"=>$jogador->NOME, "RECORDE"=>$jogador->RECORDE); } echo json_encode($resultado); ?> Site que estou utilizando para testes: https://zotinfogames.000webhostapp.com/tapball/logartapball.php Aqui está a saida utilizando usuario teste direto no php de login: [ { ID: "4", NOME: "teste", SENHA: "teste", EMAIL: "teste", DINHEIRO: "205", RECORDE: "165", CLIQUES: "64", MAIOR_NIVEL: "3", TOTAL_GANHO: "205", REGISTRADO: "1", LOGAR: "OK" } ] Obrigado por qualquer ajuda que vier.
  10. luiz_paulo_andrade

    Download dentro de um iframe no android

    Estou desenvolvendo um app com ionic que tem uma página webview dentro de um iframe, nessa webview existe um botão de download que funciona normalmente no browser, mas no android não funciona. Creio que o Android esteja bloqueando esse download, gostaria de saber como habilitar para que o download seja feito diretamente, como faz no browser.
  11. Bruno S. Ferreira

    Android vs IOS

    Boa noite. Estou com uma dúvida e já vi vídeos no youtube que só enrolam e o que encontrei no google não fui capaz de captar corretamente. Eu sei fazer app para android (básico e tal) Mas seu eu quero publicar para iphone eu tenho estas dúvidas: ---Eu preciso ter obrigatoriamente um macbook? ---Eu preciso criar todo o app do zero ou poderia uma o app do android?(sei que tem o lance da chave de lá tb mas basicamente a estrutura) O iphone teria a opção de instalar diretamente o app sem a necessidade de estar publicado na apple store, como da pra fazer no android (onde desabilita uma opção de segurança) pq das duvidas... eu não tenho mac, não posso comprar um agora, Eu uso o celular para rodar os app android e testá-los pq se eu usar o próprio pc ele trava por falta de memória e como não tenho um iphone e não compraria só pra verificar se o app fuinciona estaria fora de cogitação tb obrigado quem puder responder
  12. PeeWee

    Obter numero do IMEI e do telefone

    Boa noite pessoal, estou iniciando em Android e Java e ja começou os problema.... como sempre. Estou tentando desenvolver uma aplicação que obtenha o número do celular ou IMEI (se for o numero do celular melhor) automaticamente, de modo que o usuário nao precise preencher o campo. Bom como nao sei nada, saii pesquisando fóruns e tentando entender alguns código, e a principio o que consegui foi isso: public class Main extends Activity{ private EditText edTotal; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edTotal = (EditText)findViewById(R.id.edTotal); } public void mostranum(View n){ Activity mAppContext = null; TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number(); System.out.print(tMgr); edTotal.setText(String.valueOf(tMgr)); } } Bom acho que quem manja ja percebeu que quero mostrar na edTotal o numero do telefone, ja adicionei no android manifest a linha necessária para isso, porém ao rodar nao aparece nada no campo correspondente. Espero que algum colega possa me ajudar.
  13. Dominciano

    Entrando na área de Web/Mobile

    Olá a todos. Pessoal, trabalho em uma empresa focada em desenvolvimento Desktop utilizando a linguagem DataFlex(sim, provavelmente você nunca ouviu falar. Rs). Meu chefe quer entrar no ramo de desenvolvimento web/mobile para o setor comercial. Porém, ninguém da empresa tem grande conhecimento nessa área e como grande parte dos integrantes desse grupo já estão familiarizados com essa área, gostaria de pedir uma sugestão de quais seriam os melhores conjuntos de ferramentas(Linguagem, IDE, BD etc..) poderiamos usar para atender aos seguintes requisitos: A arquitetura seria a seguinte: -Pode ser pra web(e obrigatoriamente portar pra mobile, pois o foco será esse) ou um aplicativo pra smartphone. -Obrigatoriamente precisa sincronizar os dados com a aplicação Desktop(que utiliza o banco de dados DataFlex). -Obrigatoriamente ser barato(no sentido de licenciar/distribuir o sistema para os clientes) -A(s) ferramenta(s) de desenvolvimento podem ser pagas, desde que a distribuição seja gratuita. -Objetivo é baratear o preço no momento da venda do software para o cliente. -Os sistemas serão focados em aplicativos comerciais(padarias, bares, lojas de roupas, até mesmo para colégios etc...) -Futuramente, gostaríamos de não depender de internet o tempo todo para o cliente utilizar o sistema. -O banco de dados não deve passar dos 15kk de registros. Desde já, agradeço.
  14. Luis Felipe Rebecca

    While para cadastrar no Firebase

    Olá, Estou fazendo um aplicativo em android e me deparei com uma duvida na hora de salvar e exibir em uma lista, os usuários de um sistema. Basicamente o app por enquanto adiciona qualquer um que voce coloque o email correto e click para executar a ação de adicionar a contato, até ai ok! tudo funcionando. Agora estou precisando fazer com quem alguns usuários sejam adicionados a contatos logo que o usuário abre o app, fiz isso colocando esse método abaixo dentro do onCreate da activity principal, novamente tudo ok! Por algum motivo ele não cadastra os 3 usuários que pre-defini na variável, imagino que seja algo relacionado ao EventListener ou o while não esta rodando e executando todos os trechos. Obrigado desde já, fico no aguardo de uma solução! *Se o processor for feito manualmente, trocando o valor do contador manualmente para 1 ou 2 ou 3 e o while for trocado para "contador == 1 ou 2 ou 3 " o código executa com perfeição e cadastra os 3 contatos. private void abrirCadastroContato() { String emailContato; emailContato = "email"; int contador = 1; while (contador <=3) { if (contador == 1) { emailContato = "email1@email1.com.br"; } if (contador == 2) { emailContato = "email1@email1.com.br"; } if (contador == 3) { emailContato = "email1@email1.com.br"; } identificadorContato = Base64Custom.codificarBase64(emailContato); firebase = ConfiguracaoFirebase.getFirebase().child("usuarios").child(identificadorContato); firebase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.getValue() != null) { //Recuperar dados do contato a ser adicionado Usuario usuarioContato = dataSnapshot.getValue(Usuario.class); //Recuperar identificador usuario logado (base64) Preferencias preferencias = new Preferencias(MainActivity.this); String identificadorUsuarioLogado = preferencias.getIdentificador(); firebase = ConfiguracaoFirebase.getFirebase(); firebase = firebase.child("contatos") .child(identificadorUsuarioLogado) .child(identificadorContato); Contato contato = new Contato(); contato.setIdentificadorUsuario(identificadorContato); contato.setEmail(usuarioContato.getEmail()); contato.setNome(usuarioContato.getNome()); firebase.setValue(contato); } else { Toast.makeText(MainActivity.this, "Usuário não possui cadastro.", Toast.LENGTH_LONG).show(); } } @Override public void onCancelled(DatabaseError databaseError) { } }); contador ++; } }
  15. MichellHenrique

    Problema com upload em cliente android

    Ola pessoal, estou com problema em uploads em clientes android, mesmo dando permissão para o navegador acessar o armazenamento do celular tem arquivos que eu consigo subir e outros que não consigo. O sistema de upload é bem simples, esta funcionando bem no windows e no linux. Suspeito que o problema esteja diretamente relacionado as permissões no android mas ainda nao achei uma solução. Alguém ja passou por isso? Obs: Testei nos navegadores chrome, firefox e operamini no android e todos apresentam o mesmo problema... index.html ... <form method="POST" action="upload.php" enctype="multipart/form-data"> <input type="file" name="file1" id="file1"> <input type="submit" value="Enviar"> </form> ... upload.php <?php // Carrega arquivo de configurações require('config.php'); // Recebe arquivo a ser enviado de forma ternária $arquivo1 = (isset($_FILES['file1'])) ? $_FILES['file1'] : null; // Essa parte é por desencargo de consiencia caso por // ventura o arquivo estivesse trasendo permissões // anteriores do android que impedissem sua movimentação if(chmod($arquivo1['tmp_name'], 0777)){ echo 'Permissão mudada'; }else{ echo 'Permissão negada'; } // Aqui um teste simples para saber se o arquivo foi // transferido para a pasta temporaria do servidor if(file_exists($arquivo1['tmp_name'])){ echo 'O arquivo existe'; }else{ echo 'O arquivo não existe'; } // Move o arquivo baixado para a pasta informada no // arquivo config.php e mostra mensagem sobre a transferência echo move_uploaded_file($arquivo1['tmp_name'], $pastaupload.$arquivo1['name']) ? 'Envio Completo!' : 'Falha No Envio!'; ?>
  16. Olá, estou fazendo um projeto em Android e estou com algumas dificuldades em ralação a fazer uma listagem de imagens(Feed), onde as imagens são retiradas do firebase e são apresentadas em um fragment. Um esquema praticamente igual ao Instagram; Por enquanto estou tentando fazer a listagem somente das imagens, porem as imagens não aparecem já fiz diversos testes e queria saber aonde posso estar errando. A variável 'listaFeed' localizada no FeedFragment não apresenta valor nenhum, o que pode estar causando a não impressão dessas imagens; Segue abaixo os códigos usados para fazer a listagem. MainActivity.java(Trecho que publica a imagem no Firebase Storage): @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_sair: deslogarUsuario(); return true; case R.id.item_adicionar: abrirCadastroContato(); return true; case R.id.item_configuracoes: return true; case R.id.item_pesquisar: return true; case R.id.item_camera: compartilharFoto(); return true; default: return super.onOptionsItemSelected(item); } } private void compartilharFoto() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, 1); } //GRAVAR IMAGEM @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); final Postagem postagem = new Postagem(); postagem.setIdUsuario(idUsuarioLogado); caminhoArquivo = data.getData(); if (requestCode == 1 && resultCode == RESULT_OK && data != null) { Bitmap imagem = null; try { imagem = MediaStore.Images.Media.getBitmap(getContentResolver(), caminhoArquivo); ByteArrayOutputStream stream = new ByteArrayOutputStream(); imagem.compress(Bitmap.CompressFormat.PNG, 75, stream); byte[] dadosImagem = stream.toByteArray(); SimpleDateFormat dateFormat = new SimpleDateFormat("ddmmaaaahhmmss"); String nomeImagem = dateFormat.format(new Date()); final StorageReference imagemRef = firebaseStorage .child("imagens") .child("postagens") .child(postagem.getId() + ".jpeg"); UploadTask uploadTask = imagemRef.putFile(caminhoArquivo); Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() { @Override public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception { if (!task.isSuccessful()) { throw task.getException(); } // Continue with the task to get the download URL return imagemRef.getDownloadUrl(); } }).addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task<Uri> task) { if (task.isSuccessful()) { Uri downloadUri = task.getResult(); postagem.setCaminhoFoto(downloadUri.toString()); if (postagem.salvar()) { Toast.makeText(MainActivity.this, "Sucesso ao salvar postagem!", Toast.LENGTH_SHORT).show(); } } } }); } catch (IOException e) { e.printStackTrace(); } } } FeedFragment.java(onde a listagem é exibida): public class FeedFragment extends Fragment { private RecyclerView recyclerFeed; private FeedAdapter feedAdapter; private List<Feed> listaFeed = new ArrayList<>(); private ValueEventListener valueEventListenerFeed; private DatabaseReference feedRef; private String idUsuarioLogado; public FeedFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_feed, container, false); Preferencias preferencias = new Preferencias(getActivity()); idUsuarioLogado = preferencias.getIdentificador(); feedRef = ConfiguracaoFirebase.getFirebase() .child("feed") .child(idUsuarioLogado); recyclerFeed = view.findViewById(R.id.recyclerFeed); feedAdapter = new FeedAdapter(listaFeed, getActivity()); recyclerFeed.setHasFixedSize(true); recyclerFeed.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerFeed.setAdapter(feedAdapter); return view; } private void listarFeed(){ valueEventListenerFeed = feedRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot ds: dataSnapshot.getChildren()){ listaFeed.add(ds.getValue(Feed.class)); } feedAdapter.notifyDataSetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { } }); } @Override public void onStart() { super.onStart(); listarFeed(); Log.i("teste","teste"); } @Override public void onStop() { super.onStop(); feedRef.removeEventListener(valueEventListenerFeed); } } fragment_feed.xml(layout do fragment): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="android" xmlns:tools="tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".fragment.FeedFragment"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerFeed" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/holo_purple"> </android.support.v7.widget.RecyclerView> </LinearLayout> FeedAdapter.java(Adapter para fazer a listagem): public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.MyViewHolder>{ private List<Feed> listaFeed; private Context context; public FeedAdapter(List<Feed> listaFeed, Context context) { this.listaFeed = listaFeed; this.context = context; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemLista = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista_postagem, parent, false); return new FeedAdapter.MyViewHolder(itemLista); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { Feed feed = listaFeed.get(position); // Log.i("listaFeedPosition","listaFeed: " + listaFeed.get(position)); Uri uriFotoPostagem = Uri.parse(feed.getFotoPostagem()); Glide.with(context).load(uriFotoPostagem).into(holder.fotoPostagem); } @Override public int getItemCount() { return listaFeed.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { ImageView fotoPostagem; public MyViewHolder(View itemView) { super(itemView); fotoPostagem = itemView.findViewById(R.id.image_lista_postagem); } } } Feed(model com os getter and setter): public class Feed { private String id; private String fotoPostagem; public Feed() { } public String getFotoPostagem() { return fotoPostagem; } public void setFotoPostagem(String fotoPostagem) { this.fotoPostagem = fotoPostagem; } public String getId() { return id; } public void setId(String id) { this.id = id; } } lista_conversa(layout da lista): <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image_lista_postagem" android:layout_width="match_parent" android:layout_height="300dp" android:scaleType="fitCenter" android:padding="8dp"/> </LinearLayout> </RelativeLayout>
  17. Euler Belfortt

    Help Slider Url Android

    Olá pessoal alguém pode me ajudar? Preciso abrir uma url ao clicar em uma imagem dentro de um textsliderview Se alguém puder me ajudar fico grato. textSliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() { @Override public void onSliderClick(BaseSliderView slider) { String url = "http://www.google.com"; // Preciso passar a slider_url aqui Toast.makeText(getActivity(), "ID '" + name.get("slider_url")+"' url '"+ name.get("slider_url") + "' url recebida.", Toast.LENGTH_LONG).show(); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); } });
  18. Olá bom dia. Tenho uma aplicação android na qual tenho um slider que pego os dados do webserver php. Gostaria de saber como faço para abrir a url vinda do banco de dados, quando a imagem for clicada. Este é meu código eu fiz o código pegando como base uma URL fixa de uma variavel local. mas preciso pegar o a url que vem do banco seria a var = slider_url Se alguém puder me ajudar fico muito grato! private void makeGetSliderRequest() { JsonArrayRequest req = new JsonArrayRequest(BaseURL.GET_SLIDER, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { Log.d(TAG, response.toString()); try { // Parsing json array response // loop through each json object // arraylist list variable for store data; final ArrayList<HashMap<String, String>> listarray = new ArrayList<>(); for (int i = 0; i < response.length(); i++) { JSONObject jsonObject = (JSONObject) response .get(i); final HashMap<String, String> url_maps = new HashMap<String, String>(); url_maps.put("slider_title", jsonObject.getString("slider_title")); url_maps.put("slider_image", BaseURL.IMG_SLIDER_URL + jsonObject.getString("slider_image")); url_maps.put("slider_url", BaseURL.IMG_SLIDER_URL + jsonObject.getString("slider_url")); listarray.add(url_maps); } for (HashMap<String, String> name : listarray) { final TextSliderView textSliderView = new TextSliderView(getActivity()); // initialize a SliderLayout textSliderView .description(name.get("slider_title")) .image(name.get("slider_image")) .setScaleType(BaseSliderView.ScaleType.Fit); //adiciono o slider title no slider textSliderView.bundle(new Bundle()); textSliderView.getBundle() .putString("extra", name.get("slider_title")); imgSlider.addSlider(textSliderView); textSliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() { @Override // Aqui eu capturo o clique na imagem e abro a url. // Preciso pegar a url desta string (slider_url) e inserir no lugar da string url public void onSliderClick(BaseSliderView slider) { String url = "http://www.google.com.br"; Toast.makeText(getActivity(), "clicou:", Toast.LENGTH_SHORT).show(); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(browserIntent); } }); } } catch (JSONException e) { e.printStackTrace(); Toast.makeText(getActivity(), "Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } hidepDialog(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.d(TAG, "Error: " + error.getMessage()); Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_SHORT).show(); hidepDialog(); } }); // Adding request to request queue AppController.getInstance().addToRequestQueue(req); }
  19. E ae pessoal, gostaria de uma orientação sobre um erro que estou tomando e não consegui contornar corretamente, meu conhecimento com android é de basico autodidata. Bom o cenário é eu ger uma lista vinda de uma api que traz dados do banco de dados , imagem, nome de cidade e descrição. Quero que ao clicar seja aberta uma activity onde a mesma exiba os dados da cidade selecionada exibindo a imagem maior, nome cidade, descrição e data de saida do turismo. Pois bem quando eu clico num item da lista tomo o erro: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference at android.content.ComponentName.<init>(ComponentName.java:77) at android.content.Intent.<init>(Intent.java:4280) at garagetalke.com.laftturismo.adaptador.GramadoAdapter$GramadoHolder.onClick(GramadoAdapter.java:97) Eu uso fragmento para gerar a lista no recyclerView e criei um activity DetalhesLugares com o seu xml certinho para exibir os dados da cidade que eu cliquei, o meu fragmento que gera a lista de itens esta abaixo: fragment_lista_lugares_gramado.java public class fragment_lista_lugares_gramado extends Fragment implements Response.Listener<JSONObject>, Response.ErrorListener{ private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; private String mParam1; private String mParam2; RecyclerView recyclerAnuncio; ArrayList<Lugares> listaLugares; ProgressDialog progresso; RequestQueue request; JsonObjectRequest jsonObjectReq; private fragment_lista_lugares_gramado.OnFragmentInteractionListener mListener; public fragment_lista_lugares_gramado() { // Required empty public constructor } public static fragment_lista_lugares_gramado newInstance(String param1, String param2) { fragment_lista_lugares_gramado fragment = new fragment_lista_lugares_gramado(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View vista = inflater.inflate(R.layout.places_recycler_list, container, false); listaLugares=new ArrayList<>(); recyclerAnuncio= (RecyclerView) vista.findViewById(R.id.listRecycler); recyclerAnuncio.setLayoutManager(new LinearLayoutManager(this.getContext())); recyclerAnuncio.setHasFixedSize(true); request= Volley.newRequestQueue(getContext()); carregarWEBService(); //aqui chamo minha API que me traz os dados do banco corretamente e exibe no App return vista; } private void carregarWEBService() { ....minha API que faz a busca } // TODO: Rename method, update argument and hook method into UI event public void onButtonPressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); } } @Override public void onDetach() { super.onDetach(); mListener = null; } @Override public void onErrorResponse(VolleyError error) { progresso.hide(); Toast.makeText(getContext(), "Não foi possível listar os lugares " +error.toString() , Toast.LENGTH_SHORT).show(); Log.i("ERROR", error.toString()); } @Override public void onResponse(JSONObject response) { progresso.hide(); Lugares lugares = null; Retorno do meu json da API - OK try { for(int i=0; i<json.length();i++){ lugares = new Lugares(); JSONObject jsonObject = null; jsonObject = json.getJSONObject(i); lugares.setId(jsonObject.optString("id")); //seto todos os dados de retorno - OK listaLugares.add(lugares); } progresso.hide(); GramadoAdapter adapter = new GramadoAdapter(listaLugares, fragment_lista_lugares_gramado.this); recyclerAnuncio.setAdapter(adapter); }catch (JSONException e){ e.printStackTrace(); progresso.hide(); Toast.makeText(getContext(), "Não foi possível listar os lugares " +response , Toast.LENGTH_SHORT).show(); } } public interface OnFragmentInteractionListener { // TODO: Update argument type and name void onFragmentInteraction(Uri uri); } } Aqui esta meu Adapter : GramadoAdapter.java public class GramadoAdapter extends RecyclerView.Adapter<GramadoAdapter.GramadoHolder> { ArrayList<Lugares> listaLugares = new ArrayList<>(); fragment_lista_lugares_gramado ctx; Context fragment_lista_lugares_gramado; public GramadoAdapter(ArrayList<Lugares> listaLugares, fragment_lista_lugares_gramado ctx ){ this.listaLugares = listaLugares; this.ctx = ctx; } @NonNull @Override public GramadoHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_lugares,parent,false); GramadoHolder gramadoViewHolder = new GramadoHolder(view, fragment_lista_lugares_gramado,listaLugares); return gramadoViewHolder; } @Override public void onBindViewHolder(@NonNull GramadoHolder holder, int position) { Lugares LUG = listaLugares.get(position); holder.id.setText(LUG.getId().toString()); holder.cidade.setText(LUG.getCidade()); holder.descricao.setText(LUG.getDescricao()); holder.dataSaida.setText("Quando? "+(LUG.getDataSaida())); if(listaLugares.get(position).getImagem() != null){ holder.idImagem.setImageBitmap(LUG.getImagem()); }else{ holder.idImagem.setImageResource(R.drawable.publicacao_sem_foto); } } @Override public int getItemCount() { return listaLugares.size(); } public class GramadoHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView id, cidade, descricao, dataSaida, lugaresOnibus, valor, rating; ImageView idImagem; ArrayList<Lugares> listaLugares = new ArrayList<Lugares>(); Context ctx; Context fragment_lista_lugares_gramado; public GramadoHolder(View view, Context fragment_lista_lugares_gramado, ArrayList<Lugares> listaLugares) { super(view); this.listaLugares = listaLugares; view.setOnClickListener(this); id = (TextView) view.findViewById(R.id.id_place); cidade = (TextView) view.findViewById(R.id.cidade_place); descricao = (TextView) view.findViewById(R.id.descricao_place); dataSaida = (TextView) view.findViewById(R.id.datasaida_place); idImagem = view.findViewById(R.id.place_image); } @Override public void onClick(View v) { int position = getAdapterPosition(); Lugares lugares = this.listaLugares.get(position); //Eu acho que aqui esta meu problema mas nao sei o que pode ser...tipo nao abre a activity detalhes //ja tentei getActivity(), getApplication() e outras coisas tb, como é o fragmento que gera a lista //então nao o que fazer pra instanciar Intent intent = new Intent(fragment_lista_lugares_gramado, DetalhesLugares.class); intent.putExtra("tvImagem",lugares.getImagem()); intent.putExtra("tvCidade",lugares.getCidade()); intent.putExtra("tvdescricao",lugares.getDescricao()); this.fragment_lista_lugares_gramado.startActivity(intent); } } } DetalhesActivity.java ImageView imageView; TextView text_Cidade, text_Descricao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detalhes_lugares); imageView = (ImageView) findViewById(R.id.tvImagem); text_Cidade = (TextView) findViewById(R.id.tvCidade); text_Descricao = (TextView) findViewById(R.id.tvDesricao); imageView.setImageResource(getIntent().getIntExtra("tvImagem",00)); text_Cidade.setText("Cidade: "+getIntent().getStringExtra("tvCidade")); text_Descricao.setText("Descrição: "+getIntent().getStringExtra("tvdescricao")); } Alguém sabe me orientar do que fazer pra conseguir?
  20. kathsystems

    Android permissão para XML

    Olá, Pessoal estou tentando criar um arquivo xml em tempo de execução no Android: "CliendDataSet.SaveToFile('/data/data/App/files/Arquivo.xml');" .Não da erro mas não cria o arquivo. Meu Mainfast: <?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <!-- This is the platform API where NativeActivity was introduced. --> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> String[] permissoes = new String[]{ Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS,}; PermissionUtils.validate(this, 0, permissoes); <%uses-permission%> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_OWNER_DATA" /> <uses-permission android:name="android.permission.READ_OWNER_DATA" /> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%"> alguém sabe onde estou errando?
  21. Vulnerabilidade perigosa impacta todos os smartphones Android
  22. Galera estou tendo um problema já faz algum tempo e não estou conseguindo uma solução. Estou utilizando o Firebase como banco de dados e não estou conseguindo usar a autenticação dele. Fiz meus códigos com auxilio de alguns cursos online e ele está funcional, aparentemente, porem quando executo e dou inicio no processo de cadastro ele mostra a seguinte mensagem no Logcat e não registra o usuário no banco: Alguém teria alguma solução? 06-26 07:21:39.348 29507-29507/br.com.tecmafandroid.projeto.tecmaf W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@da4f097 06-26 07:21:39.348 29507-29598/br.com.tecmafandroid.projeto.tecmaf W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found. 06-26 07:21:39.348 29507-29598/br.com.tecmafandroid.projeto.tecmaf W/GooglePlayServicesUtil: Google Play services out of date. Requires 12451000 but found 11975436 Não sei muito bem o q essa mensagem esta querendo dizer, já tentei modificar vários arquivos, mas por enquanto o "erro" persiste. Segue os trechos de código responsáveis pela autenticação no Firebase: -Activity de cadastro usuário package br.com.tecmafandroid.projeto.tecmaf.activity; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import br.com.tecmafandroid.projeto.tecmaf.R; import br.com.tecmafandroid.projeto.tecmaf.config.ConfiguracaoFirebase; import br.com.tecmafandroid.projeto.tecmaf.model.Usuario; public class CadastroUsuarioActivity extends AppCompatActivity { private EditText nome; private EditText email; private EditText senha; private Button botaoCadastrar; private Usuario usuario; private FirebaseAuth autenticacao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cadastro_usuario); nome = (EditText) findViewById(R.id.edit_cadastro_nome); email = (EditText) findViewById(R.id.edit_cadastro_email); senha = (EditText) findViewById(R.id.edit_cadastro_senha); botaoCadastrar = (Button) findViewById(R.id.bt_cadastro); botaoCadastrar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { usuario = new Usuario(); usuario.setNome(nome.getText().toString()); usuario.setEmail(email.getText().toString()); usuario.setSenha(senha.getText().toString()); cadastrarUsuario(); } }); } private void cadastrarUsuario() { autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao(); autenticacao.createUserWithEmailAndPassword( usuario.getEmail(), usuario.getSenha() ).addOnCompleteListener(CadastroUsuarioActivity.this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()){ Toast.makeText(CadastroUsuarioActivity.this,"Sucessor ao cadastrar usuario",Toast.LENGTH_LONG).show(); }else { Toast.makeText(CadastroUsuarioActivity.this,"Erro ao cadastrar usuario",Toast.LENGTH_LONG).show(); } } }); } } -build.gradle: app apply plugin: 'com.android.application' android { compileSdkVersion 27 defaultConfig { applicationId "br.com.tecmafandroid.projeto.tecmaf" minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //noinspection GradleCompatible implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.google.firebase:firebase-core:16.0.0' implementation 'com.google.firebase:firebase-database:15.0.0' implementation 'com.android.support:design:27.1.1' implementation 'com.github.rtoshiro.mflibrary:mflibrary:1.0.0' implementation 'com.google.firebase:firebase-auth:15.0.0' } apply plugin: 'com.google.gms.google-services' -Configuração do Firebase package br.com.tecmafandroid.projeto.tecmaf.config; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; public final class ConfiguracaoFirebase { private static DatabaseReference referenciaFirebase; private static FirebaseAuth autenticacao; public static DatabaseReference getFirebase(){ if (referenciaFirebase == null){ referenciaFirebase = FirebaseDatabase.getInstance().getReference(); } return referenciaFirebase; } public static FirebaseAuth getFirebaseAutenticacao(){ if (autenticacao == null){ autenticacao = FirebaseAuth.getInstance(); } return autenticacao; } } -Model usuário package br.com.tecmafandroid.projeto.tecmaf.model; public class Usuario { private String id; private String nome; private String email; private String senha; public Usuario(){ } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } }
  23. Eu criei duas classes customizadas de acordo com o que foi orientado por meu professor para fazer a requisição no servidor, mas estou recebendo um retorno 400 e não consigo descobrir a razão. Pesquisando, vi que pode ser algo relacionado ao cabeçalho, mas não sei como enviá-lo na minha requisição JSon customizada. Este é o código do meu do meu código customizado para requisição de JsonObject: package com.example.sandrini.pokeagenda; import com.android.volley.AuthFailureError; import com.android.volley.Response; import com.android.volley.RetryPolicy; import com.android.volley.toolbox.JsonObjectRequest; import org.json.JSONObject; import java.util.HashMap; import java.util.Map; public class CustomJSONObjectRequest extends JsonObjectRequest { public CustomJSONObjectRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { super(method, url, jsonRequest, listener, errorListener); } @Override public Map<String, String> getHeaders() throws AuthFailureError { HashMap<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; } @Override public RetryPolicy getRetryPolicy() { return super.getRetryPolicy(); } } Este é o código da minha Request Queue: package com.example.sandrini.pokeagenda; import android.content.Context; import com.android.volley.Cache; import com.android.volley.Network; import com.android.volley.RequestQueue; import com.android.volley.toolbox.BasicNetwork; import com.android.volley.toolbox.DiskBasedCache; import com.android.volley.toolbox.HurlStack; public class CustomVolleyRequestQueue { private static CustomVolleyRequestQueue mInstance; private static Context mCtx; private RequestQueue mRequestQueue; private CustomVolleyRequestQueue(Context context) { //recebe o contexto da aplicação //Assim a fila dura o ciclo de vida do app mCtx = context; mRequestQueue = getRequestQueue(); } public static synchronized CustomVolleyRequestQueue getmInstance(Context context) { if (mInstance == null) { mInstance = new CustomVolleyRequestQueue(context); } //retorna uma instância da fila return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { //Cache 10MB Cache cache = new DiskBasedCache(mCtx.getCacheDir(), 10 *1024); Network network = new BasicNetwork(new HurlStack()); mRequestQueue = new RequestQueue(cache, network); mRequestQueue.start(); } return mRequestQueue; } } Este é o código da Activity onde estou tentando fazer a requisição: package com.example.sandrini.pokeagenda; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Toast; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonRequest; import com.google.gson.Gson; import org.json.JSONException; import org.json.JSONObject; import java.util.EmptyStackException; public class CreateUserActivity extends AppCompatActivity implements Response.Listener, Response.ErrorListener { private static final String REQUEST_TAG = "CreateUser"; Trainer trainer = new Trainer(); EditText loginCreateInput, emailCreateInput, pwdCreateInput; Button createUserButton; private RequestQueue mQueue; JsonRequest jsonRequest; ProgressBar progressBarCreateUser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_create_user); loginCreateInput = (EditText) findViewById(R.id.login_create_input); emailCreateInput = (EditText) findViewById(R.id.email_create_input); pwdCreateInput = (EditText) findViewById(R.id.pwd_create_input); createUserButton = (Button) findViewById(R.id.create_user_button); progressBarCreateUser = (ProgressBar) findViewById(R.id.progress_bar_create_user); progressBarCreateUser.setVisibility(View.INVISIBLE); } @Override protected void onStart() { super.onStart(); createUserButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (loginCreateInput.getText().toString().equals("")) { Toast.makeText(getApplicationContext(), "Please, set a login", Toast.LENGTH_SHORT).show(); } else if (emailCreateInput.getText().toString().equals("")) { Toast.makeText(getApplicationContext(), "Please, set an email", Toast.LENGTH_SHORT).show(); } else if (pwdCreateInput.getText().toString().equals("")) { Toast.makeText(getApplicationContext(), "Please, set a password", Toast.LENGTH_SHORT).show(); } else { String url = "http://192.168.25.6:8081/PokedexWS/webresources/pokews/poke/insert/trainer"; /*trainer.setUsername(loginCreateInput.getText().toString()); trainer.setEmail(emailCreateInput.getText().toString()); trainer.setPassword(pwdCreateInput.getText().toString());*/ trainer.setUsername("gato"); trainer.setEmail("gato"); trainer.setPassword("gato"); try { JSONObject jsonObject; Gson gson = new Gson(); String trainerToGson = gson.toJson(trainer); jsonObject = new JSONObject(trainerToGson); //String trainerToGson = "{\"username\":"+ "\"" + trainer.getUsername()+ "\"" + "," + //"\"email\":"+ "\"" + trainer.getEmail() + "\"" + "," + //"\"username\":"+ "\"" + trainer.getPassword()+ "\"" + "}"; //createUserButton.setText(trainerToGson); mQueue = CustomVolleyRequestQueue.getmInstance(CreateUserActivity.this.getApplicationContext()).getRequestQueue(); jsonRequest = new CustomJSONObjectRequest(Request.Method.POST, url, jsonObject, CreateUserActivity.this, CreateUserActivity.this); jsonRequest.getHeaders(); mQueue.add(jsonRequest); progressBarCreateUser.setVisibility(View.VISIBLE); } catch (Exception e) { e.printStackTrace(); } } } }); } @Override protected void onStop() { super.onStop(); if(mQueue != null) { mQueue.cancelAll(REQUEST_TAG); } } @Override public void onErrorResponse(VolleyError error) { progressBarCreateUser.setVisibility(View.INVISIBLE); Toast.makeText(getApplicationContext(), "Register failed", Toast.LENGTH_LONG).show(); Log.e("erro400", error.getMessage().toString()); Log.e("erro400", error.getCause().toString()); Log.e("erro400", error.getStackTrace().toString()); } @Override public void onResponse(Object trainerObject) { progressBarCreateUser.setVisibility(View.INVISIBLE); Toast.makeText(getApplicationContext(), "Registered successfully", Toast.LENGTH_LONG).show(); Intent intent = new Intent(CreateUserActivity.this, WelcomeTrainerActivity.class); startActivity(intent); finish(); } } Este é o meu Web Service: package ws; import com.google.gson.Gson; import dao.PokemonDAO; import dao.TrainerDAO; import java.util.ArrayList; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.Produces; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PUT; import javax.ws.rs.PathParam; import javax.ws.rs.core.MediaType; import model.Pokemon; import model.Trainer; /** * REST Web Service * * @author sandrini */ @Path("pokews") public class PokedexWebService { PokemonDAO pokemonDAO = new PokemonDAO(); TrainerDAO trainerDAO = new TrainerDAO(); @Context private UriInfo context; /** * Creates a new instance of PokedexWebService */ public PokedexWebService() { } /** * Retrieves representation of an instance of teste.GenericResource * @return an instance of java.lang.String */ @GET @Produces(MediaType.APPLICATION_XML) public String getXml() { //TODO return proper representation object throw new UnsupportedOperationException(); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("poke/list") public ArrayList<Pokemon> pokeList() { return pokemonDAO.listPokemon(); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("poke/fetch/{id}") public Pokemon pokeFetch(@PathParam("id") int id) { return pokemonDAO.fetchPokemon(id); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("poke/isFavorite/{id}") public String pokeIsFavorite(@PathParam("id") int id) { return pokemonDAO.isFavorite(id); } @GET @Produces(MediaType.APPLICATION_JSON) @Path("poke/login/{login}/{pwd}") public Trainer pokelogin(@PathParam("login") String login, @PathParam("pwd") String pwd) { return trainerDAO.authUser(login, pwd); } @DELETE @Path("poke/delete/{id}") public boolean delete(@PathParam("id")int id) { return pokemonDAO.deletePokemon(id); } @POST @Consumes(MediaType.APPLICATION_JSON) @Path("poke/insert") public boolean pokeInsert(String content) { Gson gson = new Gson(); Pokemon pokemon = (Pokemon) gson.fromJson(content, Pokemon.class); return pokemonDAO.insertPokemon(pokemon); } @POST @Consumes(MediaType.APPLICATION_JSON) @Path("poke/insert/trainer") public boolean trainerInsert(String content) { Gson gson = new Gson(); Trainer trainer = (Trainer) gson.fromJson(content, Trainer.class); return trainerDAO.insertTrainer(trainer); } @PUT @Consumes(MediaType.APPLICATION_JSON) @Path("poke/update") public boolean pokeUpdate(String content) { Gson gson = new Gson(); Pokemon pokemon = (Pokemon) gson.fromJson(content, Pokemon.class); return pokemonDAO.updatePokemon(pokemon); } /** * PUT method for updating or creating an instance of GenericResource * @param content representation for the resource */ @PUT @Consumes(MediaType.APPLICATION_XML) public void putXml(String content) { } } Eu peguei um código java pra testar o WS e tá funcionando, só não estou conseguindo requisitar pelo android: package acessorest; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.lang.ProcessBuilder.Redirect.Type; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; /** * * @author marcelosiedler */ public class HttpExemplo { private final String USER_AGENT = "Mozilla/5.0"; public static void main(String[] args) throws Exception { HttpExemplo http = new HttpExemplo(); Gson gson = new Gson(); Pokemon pokemon = new Pokemon(); java.lang.reflect.Type pokemonType = new TypeToken<Pokemon>() { }.getType(); String chamadaWS = "http://192.168.25.6:8081/PokedexWS/webresources/pokews/poke/insert/trainer"; Trainer trainer = new Trainer(); trainer.setUsername("quadrado"); trainer.setEmail("quadrado"); trainer.setPassword("quadrado"); //System.out.println(gson.toJson(trainer)); String trainerToGson = gson.toJson(trainer); /*String trainerToGson = "{\"username\":"+ "\"" + trainer.getUsername()+ "\"" + "," + "\"email\":"+ "\"" + trainer.getEmail() + "\"" + "," + "\"password\":"+ "\"" + trainer.getPassword()+ "\"" + "}";*/ //System.out.println(trainerToGson); //String retorn = http.sendGet(chamadaWS, "DELETE"); //pokemon = gson.fromJson(json, pokemonType); //System.out.println(retorn); http.sendPost(chamadaWS,trainerToGson, "POST"); } // HTTP GET request private String sendGet(String url, String method) throws Exception { URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // optional default is GET con.setRequestMethod(method); //add request header con.setRequestProperty("User-Agent", USER_AGENT); int responseCode = con.getResponseCode(); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); //print result System.out.println(response.toString()); return response.toString(); } // HTTP POST request private void sendPost(String url, String parameters, String method) throws Exception { URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); //add reuqest header con.setRequestMethod(method); con.setRequestProperty("Content-Type", "application/json"); con.setRequestProperty("User-Agent", USER_AGENT); con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); String urlParameters = parameters; // Send post request con.setDoOutput(true); DataOutputStream wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes(urlParameters); wr.flush(); wr.close(); int responseCode = con.getResponseCode(); System.out.println("\nSending 'POST' request to URL : " + url); System.out.println("Post parameters : " + urlParameters); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); //print result System.out.println(response.toString()); } } android post volley singleton
  24. Ao tentar cadastrar novo usuário no Firebase através do próprio recurso de autenticação, aparece um erro no Logcat que faz com que o botão cadastrar não faça a ação: 06-21 12:25:48.635 16627-17650/br.com.whatsapp.projeto.whatsapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false (HTTPLog)-Static: isSBSettingEnabled false 06-21 12:25:49.755 16627-17650/br.com.whatsapp.projeto.whatsapp I/System.out: (HTTPLog)-Static: isSBSettingEnabled false (HTTPLog)-Static: isSBSettingEnabled false 06-21 12:35:19.215 16627-16633/br.com.whatsapp.projeto.whatsapp I/art: Debugger is no longer active Imagino que o problema seja das dependências ou de onde eu puxo o FirebaseAuth.
  25. cristianomg

    Ajuda com click FloatingActionButton

    Bom estou iniciando em android, e cheguei até o ponto onde quero implementar um FloatingActionButton , que ao clicar neste botão eu seja direcionado a uma nova activity de cadastro por exemplo. Eu tenho estudado e desenvolvido com fragmentos que possuem seu adapter e gero a lista de dados com recyclerView, ok o contexto é este. Agora eu queria saber onde coloco e como implemento que este meu FloatingActionButton ao clicar nele eu seja direcionado a outra activity Vou deixar aqui meu codigo das intereções e em maiusculo o que foz pro botão floating, não sei se é o local certo para fazer esta chamado, pois fiquei confuso com o que li e estudei sobre o assunto. Meu ADAPTER public class TimelineAdapterImagens extends RecyclerView.Adapter<TimelineAdapterImagens.TimelinesHolder> { List<Timeline> listaTimelineImg; private View.OnClickListener listener; Button btnDetails, btnEditar; //AQUI ESTOU CRIANDO O BOTAO private android.support.design.widget.FloatingActionButton fab; public TimelineAdapterImagens(List<Timeline> listaTimelineImg) { this.listaTimelineImg = listaTimelineImg; } @NonNull @Override public TimelineAdapterImagens.TimelinesHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View vista = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_timeline_item_timeline,parent,false); return new TimelineAdapterImagens.TimelinesHolder(vista); //AQUI EU ENTENDI QUE TERIA A INSTANCIA DO BOTAO PARA O CLICK LOGO ABAIXO fab = (android.support.design.widget.FloatingActionButton) getActivity().findViewById(R.id.pink_icon); } @Override public void onBindViewHolder(@NonNull TimelineAdapterImagens.TimelinesHolder holder, int position) { holder.nomeUsuario.setText(listaTimelineImg.get(position).getNomeUsuario().toString()); holder.textoPostagem.setText(listaTimelineImg.get(position).getTextoPostagem().toString()); holder.idQuantLikes.setText(listaTimelineImg.get(position).getQuantLikes().toString()+" curtiram"); holder.dataPostagem.setText(listaTimelineImg.get(position).getDataPostagem().toString()); if(listaTimelineImg.get(position).getImagem() != null){ holder.idImagem.setImageBitmap(listaTimelineImg.get(position).getImagem()); }else{ holder.idImagem.setImageResource(R.drawable.sem_foto); } holder.setOnClickListeners(); } @Override public int getItemCount() { return listaTimelineImg.size(); } public class TimelinesHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView codigoPostagem,nomeUsuario,textoPostagem,idQuantLikes,dataPostagem ; ImageView idImagem; Button btnDetails,btnEditar; Context context; public TimelinesHolder(View itemView) { super(itemView); context = itemView.getContext(); nomeUsuario = (TextView) itemView.findViewById(R.id.nomeUsuario); textoPostagem = (TextView) itemView.findViewById(R.id.textoPostagem); idQuantLikes = (TextView) itemView.findViewById(R.id.idQuantLikes); dataPostagem = (TextView) itemView.findViewById(R.id.dataPostagem); idImagem = itemView.findViewById(R.id.idImagem); } // AQUI FIZ UM TESTE PARA VER SE AO CLICAR RECEBIA UMA MENSAGEM UE FOI CLICADO PARA SABER SE JA PODERIA IMPLEMENTAR A CHAMADA DE UMA OUTRA ACTIVITY @Override public void onClick(View v) { Toast.makeText(context,"oioiio",Toast.LENGTH_SHORT).show(); } public void setOnClickListeners() { } } } MINHA ACTIVITY FRAG public static fragmentoGeraListaTimeline newInstance(String param1, String param2) { fragmentoGeraListaTimeline fragment = new fragmentoGeraListaTimeline(); Bundle args = new Bundle(); args.putString(ARG_PARAM1, param1); args.putString(ARG_PARAM2, param2); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mParam1 = getArguments().getString(ARG_PARAM1); mParam2 = getArguments().getString(ARG_PARAM2); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View vista = inflater.inflate(R.layout.activity_main_time, container, false); listaTimeline=new ArrayList<>(); recyclerTimeline= (RecyclerView) vista.findViewById(R.id.recyclerviewtime); recyclerTimeline.setLayoutManager(new LinearLayoutManager(this.getContext())); recyclerTimeline.setHasFixedSize(true); request= Volley.newRequestQueue(getContext()); carregarWEBService(); return vista; } private void carregarWEBService() { // FAÇO A BUSCA DOS MEUS DADOS PARA LISTAR NO RECYCLER - TUDO OK ATE AQUI jsonObjectReq = new JsonObjectRequest(Request.Method.GET, url, null, this, this); request.add(jsonObjectReq); } // TODO: Rename method, update argument and hook method into UI event public void onButtonPressed(Uri uri) { if (mListener != null) { mListener.onFragmentInteraction(uri); } } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof fragmentoGeraListaTimeline.OnFragmentInteractionListener) { mListener = (fragmentoGeraListaTimeline.OnFragmentInteractionListener) context; } else { throw new RuntimeException(context.toString() + " must implement OnFragmentInteractionListener"); } } @Override public void onDetach() { super.onDetach(); mListener = null; } @Override public void onErrorResponse(VolleyError error) { progresso.hide(); Toast.makeText(getContext(), "Não foi possível listar " +error.toString() , Toast.LENGTH_SHORT).show(); Log.i("ERROR", error.toString()); } @Override public void onResponse(JSONObject response) { progresso.hide(); Timeline timeline = null; JSONArray json = response.optJSONArray("timelineImg"); try { for(int i=0; i<json.length();i++){ timeline = new Timeline(); JSONObject jsonObject = null; jsonObject = json.getJSONObject(i); // AQUI O RETORNO DO MEU OBJETO JSON - TUDO CERTO FUNCIONANDO listaTimeline.add(timeline); } progresso.hide(); TimelineAdapterImagens adapter = new TimelineAdapterImagens(listaTimeline); recyclerTimeline.setAdapter(adapter); }catch (JSONException e){ e.printStackTrace(); progresso.hide(); Toast.makeText(getContext(), "Não foi possível listar os dados " +response , Toast.LENGTH_SHORT).show(); } } public interface OnFragmentInteractionListener { // TODO: Update argument type and name void onFragmentInteraction(Uri uri); } Agora não sei se a chamada é no meu adapter e se esta no local correto ou se é no meu fragmento :(
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.