Selected Item Listview Retrofit

Asked

Viewed 112 times

2

I have an application that uses retrofit for connection, and in it I have a listview where I want to do a long click on it and select the position item and do a post on the webservice with this item, everything is already working, it turns out that I am not able to create the part of selecting the right item, the way I did it selects, but only the first on the list and it disturbs me.

  listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

                    @Override
                    public boolean onItemLongClick(final AdapterView<?> adapterView, final View view, final int position, long l) {
                        AlertDialog.Builder builder = new AlertDialog.Builder(BuscaActivity.this);
                        builder.setTitle("Deseja inserir na lista?");
                        builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {

                            public void onClick(DialogInterface arg0, int arg1) {
                                ListaProduto produto = new ListaProduto();

                                //TextView codigoInterno = (TextView) findViewById(R.id.codigointerno);
                                //String interno = codigoInterno.getText().toString();

                                //TextView codigoEan = (TextView) findViewById(R.id.codigo_ean);
                                //String ean = codigoEan.getText().toString();

                                //produto.setCodigoproduto(interno);
                                //produto.setCodigoean(ean);
                                produto.setUclogin(getSharedPreferences(PREFS_USER, Context.MODE_PRIVATE).getString("PrefUser", ""));

                                //Toast.makeText(getApplicationContext(), "Posição: "+adapterView.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();

                                produto.setCodigoproduto(((Produto) adapterView.getSelectedItem()).getCodigointerno());
                                produto.setCodigoean(((Produto) adapterView.getSelectedItem()).getCodigoean());

                                loadJsonLista(produto);
                            }
                        });
                            builder.setNegativeButton("Não", null);
                    alerta = builder.create();
                    alerta.show();

                    return true;
                }
            });

I want to pull inside the setCodigoproduct the internal code and the codeset the code_ean

My model:

public class Produto {
public String codigointerno;
public String codigoean;
public String descricaocompleta;
private String descricaoreduzida;
private double precovenda;
private double precocusto;
private double estoque;
private double margem;


public String getCodigointerno() {
    return codigointerno;
}

public void setCodigointerno(String codigointerno) {
    this.codigointerno = codigointerno;
}

public String getCodigoean() {
    return codigoean;
}

public void setCodigoean(String codigoean) {
    this.codigoean = codigoean;
}

public String getDescricaocompleta() {
    return descricaocompleta;
}

public void setDescricaocompleta(String descricaocompleta) {
    this.descricaocompleta = descricaocompleta;
}

public String getDescricaoreduzida() {
    return descricaoreduzida;
}

public void setDescricaoreduzida(String descricaoreduzida) {
    this.descricaoreduzida = descricaoreduzida;
}

public double getPrecovenda() {
    return precovenda;
}

public void setPrecovenda(double precovenda) {
    this.precovenda = precovenda;
}

public double getPrecocusto() {
    return precocusto;
}

public void setPrecocusto(double precocusto) {
    this.precocusto = precocusto;
}

public double getEstoque() {
    return estoque;
}

public void setEstoque(double estoque) {
    this.estoque = estoque;
}

public double getMargem() {
    return margem;
}

public void setMargem(double margem) {
    this.margem = margem;
}

My Adapter:

public class ProdutoAdapter extends ArrayAdapter<Produto> {
private Context context;
private List<Produto> values;

public ProdutoAdapter(Context context, List<Produto> values) {
    super(context, R.layout.list_item_pagination, values);

    this.context = context;
    this.values = values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;

    if (row == null) {
        LayoutInflater inflater =
                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.list_item_pagination, parent, false);
    }
    TextView interno = (TextView)row.findViewById(R.id.codigointerno);
    TextView ean = (TextView) row.findViewById(R.id.codigo_ean);
    TextView completa = (TextView) row.findViewById(R.id.descricao_completa);
    TextView reduzida = (TextView) row.findViewById(R.id.descricao_reduzida);
    TextView venda = (TextView) row.findViewById(R.id.valor_venda);
    TextView custo = (TextView) row.findViewById(R.id.valor_custo);
    TextView estoque = (TextView) row.findViewById(R.id.valor_estoque);
    TextView margem = (TextView) row.findViewById(R.id.valor_margem);

    Produto item = values.get(position);

    String message_interno = item.getCodigointerno();
    String message_ean = item.getCodigoean();
    String message_completa = item.getDescricaocompleta();
    String message_reduzida = item.getDescricaoreduzida();
    double message_venda = item.getPrecovenda();
    double message_custo = item.getPrecocusto();
    double message_estoque = item.getEstoque();
    double message_margem = item.getMargem();

    DecimalFormat d_venda = new DecimalFormat(",##0.00");
    DecimalFormat d_custo = new DecimalFormat(",##0.000");
    DecimalFormat d_estoque = new DecimalFormat(",##0.000");
    DecimalFormat d_margem = new DecimalFormat(",##0.00");

    interno.setText(message_interno);
    ean.setText(message_ean);
    completa.setText(message_completa);
    reduzida.setText(message_reduzida);
    venda.setText(d_venda.format(message_venda));
    custo.setText(d_custo.format(message_custo));
    estoque.setText(d_estoque.format(message_estoque));
    margem.setText(d_margem.format(message_margem));

    return row;
}

My retrofit connection:

   public void loadJsonLista(ListaProduto produto){

    Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl("http://"+getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).getString("PrefHost", "") +":8080/FazendaWebservice/webresources/fazenda/")
            .addConverterFactory(GsonConverterFactory.create());

    Retrofit retrofit = builder.build();

    ListaProdutosClient client = retrofit.create(ListaProdutosClient.class);
    Call<ListaProduto> call = client.reposForUser(produto);

    call.enqueue(new Callback<ListaProduto>() {
        @Override
        public void onResponse(Call<ListaProduto> call, Response<ListaProduto> response) {
                ListaProduto produtos = response.body();
                Toast.makeText(getApplicationContext(), "Código: " + produtos.getCodigoproduto(), Toast.LENGTH_SHORT).show();
        }
        @Override
        public void onFailure(Call<ListaProduto> call, Throwable t) {
            //Toast.makeText(BuscaActivity.this, "Erro ao criar lista", Toast.LENGTH_SHORT).show();
        }
    });
}

Error that is giving is in this line produto.setCodigoproduto(((Produto) adapterView.getSelectedItem()).getCodigointerno());

09-26 10:59:24.228 12792-12792/br.com.volpix.consultproducts E/Androidruntime: FATAL EXCEPTION: main Process: br.com.volpix.consultingproducts, PID: 12792 java.lang.Nullpointerexception: Attempt to invoke virtual method java.lang.String br.com.volpix.consultationproducts.getCodigointerno()' on a null Object Reference at br.com.volpix.consulting.Search activity$2$1.onClick(Buscaactivity.java:107) at android.support.v7.app.Alertcontroller$Buttonhandler.handleMessage(Alertcontroller.java:161) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.Activitythread.main(Activitythread.java:6165) at java.lang.reflect.Method.invoke(Native Method) at com.android.Internal.os.Zygoteinit$Methodandargscaller.run(Zygoteinit.java:888) at com.android.Internal.os.Zygoteinit.main(Zygoteinit.java:778)

1 answer

-3


  1. Product.setCodigoproduct(your list.get(position)); setCodigoean(your.get(position list));

  2. Get the same Adapter list

Browser other questions tagged

You are not signed in. Login or sign up in order to post.