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)