Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

godrugal

Android Studio,Problemas com RecyclerView

Recommended Posts

Criei uma tela de busca com Recycleview, e ao efetuar a busca ele traz o resultado armazenado no banco. Até ai tudo bem. Porém se existir no banco 2 nomes iguais como por exemplo: se existir vinte pessoas com o nome "Carlos", ele só me traz uma pessoa. Aqui abaixo segue a classe adapter e o recycle. Estou usando a tela de fragment. Outro detalhe, se eu repetir a mesma busca, ele inseri na lista abaixo o mesmo item da busca anterior, ou seja, fica 2 itens duplicados com os mesmos valores no recycleview. Eu não sei se o erro ta dentro do método onResponse ou se ta no PHP. Deve ser uma besteira. Quem puder ajudar, agradeço.

 

Classe Adapter:

 

public class CursosAdapterImgUrl extends RecyclerView.Adapter<CursosAdapterImgUrl.CursosHolder> {

List<Curso>listaCursos;
RequestQueue request;
Context context;

public CursosAdapterImgUrl(List<Curso> listaCursos, Context context) {
    this.listaCursos = listaCursos;
    this.context = context;
    request = Volley.newRequestQueue(context);
}

@NonNull
@Override
public CursosHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View vista = LayoutInflater.from(parent.getContext()).inflate(R.layout.lista_cursos_img, parent, false);
    RecyclerView.LayoutParams layoutParams =
            new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT
            );

    vista.setLayoutParams(layoutParams);
    return new CursosHolder(vista);
}

@Override
public void onBindViewHolder(@NonNull CursosHolder holder, int position) {
   // holder.txtCodigo.setText(listaCursos.get(position).getCodigo().toString());
    holder.txtNome.setText(listaCursos.get(position).getNome().toString());
    holder.txtProfessor.setText(listaCursos.get(position).getProfessor().toString());
    holder.txtCategoria.setText(listaCursos.get(position).getCategoria().toString());


    if(listaCursos.get(position).getUrlImagem()!=null){


        carregarImagemWEBService(listaCursos.get(position).getUrlImagem(),holder);
    }else{
        holder.idImagem.setImageResource(R.drawable.sem_foto);
    }

}

private void carregarImagemWEBService(String urlImagem, final CursosHolder holder) {

    String caminhoImage = "http://192.168.0.12/webservices/" +urlImagem;
    caminhoImage = caminhoImage.replace(" ", "%20");

    ImageRequest imageReq = new ImageRequest(caminhoImage, new Response.Listener<Bitmap>() {
        @Override
        public void onResponse(Bitmap response) {

            holder.idImagem.setImageBitmap(response);

        }
    }, 0, 0, ImageView.ScaleType.CENTER, null, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {

            Toast.makeText(context, "Erro ao carregar a imagem",Toast.LENGTH_SHORT).show();
        }
    });

    request.add(imageReq);
}

@Override
public int getItemCount() {
    return listaCursos.size();
}

public class CursosHolder extends RecyclerView.ViewHolder {

    TextView txtNome,txtCodigo,txtProfessor, txtCategoria;
    ImageView idImagem;

    public CursosHolder(View itemView) {
        super(itemView);
        txtNome= (TextView) itemView.findViewById(R.id.nomeCurso);
        //txtCodigo= (TextView) itemView.findViewById(R.id.txtCodigo);
        txtProfessor= (TextView) itemView.findViewById(R.id.Professor);
        txtCategoria= (TextView) itemView.findViewById(R.id.Categoria);
        idImagem=  itemView.findViewById(R.id.idImagem);
    }
}
}

 

Classe do Recicleview:

 

public class consultarListaNome extends Fragment implements Response.Listener<JSONObject>, Response.ErrorListener {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

EditText campoNome;


Button botaoConsultar;
RecyclerView recyclerCursos;
ArrayList<Curso> listaCursos;
ProgressDialog progresso;
RequestQueue request;
JsonObjectRequest jsonObjectReq;
ImageView imgFoto;


private OnFragmentInteractionListener mListener;

public consultarListaNome() {
    // Required empty public constructor
}

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param param1 Parameter 1.
 * @param param2 Parameter 2.
 * @return A new instance of fragment consultarListaNome.
 */
// TODO: Rename and change types and number of parameters
public static consultarListaNome newInstance(String param1, String param2) {
    consultarListaNome fragment = new consultarListaNome();
    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) {
    // Inflate the layout for this fragment
    View vista = inflater.inflate(R.layout.fragment_consultar_lista_nome, container, false);
    listaCursos=new ArrayList<>();

    recyclerCursos= (RecyclerView) vista.findViewById(R.id.idRecyclerNome);   // se der problema, mude aqui
    recyclerCursos.setLayoutManager(new LinearLayoutManager(this.getContext()));
    recyclerCursos.setHasFixedSize(true);


    campoNome = (EditText) vista.findViewById(R.id.campoNome);
    botaoConsultar = (Button) vista.findViewById(R.id.btnConsultar);

    request= Volley.newRequestQueue(getContext());

    botaoConsultar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            carregarWEBService();
        }
    });

    return vista;
}

private void carregarWEBService() {

    progresso = new ProgressDialog(getContext());
    progresso.setMessage("Buscando...");
    progresso.show();

    String url = "http://192.168.0.12/webservices/consultarCursoNome.php?nome="+ campoNome.getText().toString();


    jsonObjectReq = new JsonObjectRequest(Request.Method.GET, url, null, this, this);
    request.add(jsonObjectReq);

}


@Override
public void onErrorResponse(VolleyError error) {

    progresso.hide();
    Toast.makeText(getContext(), "Não foi possível listar os cursos " +error.toString() , Toast.LENGTH_SHORT).show();
    Log.i("ERROR", error.toString());

}

@Override
public void onResponse(JSONObject response) {

    progresso.hide();

    Curso curso = null;
    JSONArray json = response.optJSONArray("curso"); // nome da tabela curso


    try {
        for(int i=0; i<json.length();i++){
            curso = new Curso();
            JSONObject jsonObject = null;
            jsonObject = json.getJSONObject(i);

            curso.setNome(jsonObject.optString("nome"));
            curso.setProfessor(jsonObject.optString("professor"));
            curso.setCategoria(jsonObject.optString("categoria"));
            curso.setUrlImagem(jsonObject.optString("url_imagem"));
            listaCursos.add(curso);
        }

        progresso.hide();
        CursosAdapterImgUrl adapter = new CursosAdapterImgUrl(listaCursos,getContext());
        recyclerCursos.setAdapter(adapter);


    }catch (JSONException e){
        e.printStackTrace();
        progresso.hide();
        Toast.makeText(getContext(), "Não foi possível listar os cursos " +response , Toast.LENGTH_SHORT).show();

    }


}




// 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 OnFragmentInteractionListener) {
        mListener = (OnFragmentInteractionListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}


public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onFragmentInteraction(Uri uri);
}
}

 

Código do PHP:

 

<?PHP

include "conexao.php";

$json=array();

    if(isset($_GET["nome"])){
        $nome=$_GET["nome"];


        $consulta="select * from curso where nome= '{$nome}'";  // busca pelo nome
        $resultado=mysqli_query($conexao,$consulta);

        if($registro=mysqli_fetch_array($resultado)){
            $result["codigo"]=$registro['codigo'];
            $result["nome"]=$registro['nome'];
            $result["categoria"]=$registro['categoria'];
            $result["professor"]=$registro['professor'];
            $result["url_imagem"]=$registro['url_imagem'];
            $json['curso'][]=$result;
        }else{
            $resultar["codigo"]=0;
            $resultar["nome"]='nao registrado';
            $resultar["categoria"]='nao registrado';
            $resultar["professor"]='nao registrado';
            $result["url_imagem"]=$registro['url_imagem'];
            
            $json['curso'][]=$resultar;
        }

        mysqli_close($conexao);
        echo json_encode($json);
    }
    else{
            $resultar["codigo"]=0;
            $resultar["nome"]='nao registrado';
            $resultar["categoria"]='nao registrado';
            $resultar["professor"]='nao registrado';
            $result["url_imagem"]=$registro['url_imagem'];
            $json['curso'][]=$resultar;
        echo json_encode($json);
    }
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por pashaa
      Como podem ver a google não aceita mais a SDK da unity ads por motivos da empresa
      Então resolvi remover toda a SDK do meu código. Libs,linhas de comando, tudo. e mesmo assim ainda ela acusa que tenho a sdk dentro do meu app
      Já tenho mais ou menos 1 ano programando em android e nunca tinha visto algo sobre ou esse erro persistir já que tirei tudo de dentro do app
      A minha dúvida é, onde estou errando? Onde deixei alguma coisa sobre essa sdk?Que inclusive coloquei pra teste a uns 5 meses atrás e até tinha esquecido dela kk
      Peço que me ajudem dando sugestões de como remover por completo pois eu praticamente reverti o processo de adicionar a SDK e todo tipo de linha relacionada a unity.ads
       

    • Por Fernando Rafael
      Bom dia, estou baixando arquivos que estão em uma hospedagem própria para serem acessados por um aplicativo que estou desenvolvendo (consigo fazer normalmente utilizando os comandos citado mais a baixo), porém os arquivos ficam salvos na pasta padrão de DOWNLOADS do Android, minha intenção não é ficar acumulando estes arquivos no aparelho, ou esperar que o usuário exclua manualmente, gostaria em salva-los em uma pasta interna do aplicativo para que seja possível excluir automaticamente pelo próprio aplicativo, já tentei como alternativa excluir esses arquivos da pasta DOWNLOADS, mas não consegui...
       
      Segue o código que estou usando para baixar os arquivos, queria adaptar para baixar direto na pasta interna do aplicativo, ou como alternativa caso isso não seja possível, conseguir excluir esses arquivos da pasta DOWNLOADS do Android...
       
      String url = "https://www.site.com/arquivo.pdf"; //Arquivo que vou baixar DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); request.setDescription("Alguma descrição"); request.setTitle("Algum titulo"); //A notificação de conslusão só esta disponível a partir da API 11 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } //Salvando o arquivo no diretório de Downloads request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "arquivo.pdf"); DownloadManager manager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); manager.enqueue(request);  
    • Por Fernando Rafael
      Bom dia, alguém poderia me ajudar com esse problema? 
       
      Estou fazendo um aplicativo bem simples em que sua única função será criar uma pasta no celular (em local acessível pelo gerenciador de arquivos do usuário), e posteriormente copiar arquivos de outro local ou rede e colocar nesta pasta.
       
      Fiz algumas pesquisas, mas por incrível que pareça não encontrei algo que tenha funcionando. Também tenho dúvidas sobre qual seria o equivalente ao "C:/" do Android.
    • Por rharisonluca
      Bom dia galera.
       
      Vou iniciar uma projeto para a empresa onde eu trabalho, eu não sou desenvolvedor, porém tenho noção e sou formado na área. Abaixo vou explicar o modelo do projeto:
       
      O projeto consiste em um aplicativo para controle de roteirização da frota;
      Cada motorista terá acesso ao app pelo celular com login e senha;
      O encarregado pelo logística terá que ter acesso pelo PC (WEB) onde ele irá direcionar os roteiros para cada motorista, nessa plataforma web ele irá enviar as coletas e entregas que cada motorista terá que fazer.
       
      Basicamente o projeto é esse, preciso de norte para saber o que tenho que estudar para desenvolver esse projeto, qual framework estudar, qual liguagem, etc.
       
      Desde já agradeço, abraços.
       
      Att.
       
    • Por glocatelli
      Boa tarde,

      Preciso desenvolver um app com os parâmetros descritos na tabela e estou com dificuldade de pensar uma forma de fazer isso, pensei em vários "If's" para classificar o conforto térmico, mas como existem resultados que se repetem em mais de uma classificação acabei descartando esse caminho.
      Se possível me deem dicas de como os senhores procederiam =D

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.