В моей деятельности я добавляю кнопку заголовка, чтобы сохранить значения listview с помощью EditText и отправить их в веб-приложение php/mysql.Получить все значения listview после кнопки заголовка нажмите
Я могу получить значения listview, если я использую setOnItemClickListener, но когда я использую setOnClickListener в кнопке сохранения заголовка, я не могу выполнять итерацию через listview.
Я использую адаптер пользовательского массива: -
общественного класса CustomOrderAdaptor расширяет ArrayAdapter { INT GroupID;
ArrayList<OneOrder> records;
Context context;
public CustomOrderAdaptor(Context context, int vg, int id, ArrayList<OneOrder>records) {
super(context, vg, id, records);
this.context = context;
groupid = vg;
this.records = records;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(groupid, parent, false);
TextView textName = (TextView) itemView.findViewById(R.id.product_name);
textName.setText(records.get(position).getproduct_name());
EditText new_quantity = (EditText) itemView.findViewById(R.id.new_quantity);
new_quantity.setText(records.get(position).getnew_quantity());
TextView textOrderitemid = (TextView) itemView.findViewById(R.id.order_item_id);
textOrderitemid.setText(records.get(position).getorder_item_id());
TextView textQuantity = (TextView) itemView.findViewById(R.id.quantity);
textQuantity.setText(records.get(position).getquantity());
return itemView;
}
}
модель данных: -
public class OneOrder {
private String quantity;
private String new_quantity;
private String product_name;
private String order_item_id;
public void setquantity(String quantity){this.quantity=quantity;}
public void setnew_quantity(String new_quantity){this.new_quantity=new_quantity;}
public void setproduct_name(String product_name){this.product_name=product_name;}
public void setorder_item_id(String order_item_id){this.order_item_id=order_item_id;}
public String getquantity(){return quantity;}
public String getnew_quantity(){return new_quantity;}
public String getproduct_name(){return product_name;}
public String getorder_item_id(){return order_item_id;}
}
Моя деятельность: -
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_order);
context = this;
records = new ArrayList<OneOrder>();
listOrder = (ListView) findViewById(R.id.order_item_list);
LayoutInflater inflater = LayoutInflater.from(this);
View nTop = inflater.inflate(R.layout.activity_get_order_footer, null);
listOrder.addHeaderView(nTop);
adapter = new CustomOrderAdaptor(context, R.layout.list_order, R.id.product_name,
records);
listOrder.setAdapter(adapter);
Button mButton = (Button) nTop.findViewById(R.id.button_save);
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
JSONObject order_items = new JSONObject();
JSONObject sendObject = new JSONObject();
for (int i=0;i<adapter.getCount();i++){
JSONObject order_item = new JSONObject();
OneOrder current_order = (OneOrder) listOrder.getAdapter().getItem(i);
//OneOrder current_order = (OneOrder) getListView().getItemAtPosition(i);
try {
order_item.put("quantity", current_order.getquantity().toString());
order_item.put("new_quantity", current_order.getnew_quantity().toString());
order_item.put("order_item_id", current_order.getorder_item_id().toString());
order_items.put(String.valueOf(i),order_item);
} catch (JSONException e) {
e.printStackTrace();
}
}
HttpURLConnection conn = null;
try {
Intent i = getIntent(); // gets the previously created intent
String order_id = i.getStringExtra("order_id");
sendObject.put("items", order_items.toString());
sendObject.put("order_id", order_id);
try {
URL url = new URL("http://192.168.0.70/steam_dos/index.php?option=com_steam§ion=linen&task=save_order_out");
String message = sendObject.toString();
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /*milliseconds*/);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setFixedLengthStreamingMode(message.getBytes().length);
//make some HTTP header nicety
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");
//open
conn.connect();
//setup send
BufferedOutputStream os = new BufferedOutputStream(conn.getOutputStream());
os.write(message.getBytes());
//clean up
os.flush();
//do something with response
InputStream is = conn.getInputStream();
}catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
ошибка здесь: -
order_item.put("quantity", current_order.getquantity().toString());
ошибка проста: -
java.lang.NullPointerException: Попытка вызвать виртуальный метод "java.lang.String au.com.southportsteamlaundry.rfid.steamscanadditions.OneOrder.getquantity() на ссылка объект нулевой
мнение выглядит следующим образом: -
Я пытаюсь сохранить все значения ListView после нажатия на кнопку сохранения нажата но я не получаю элементы списка с этим кодом, не могли бы вы объяснить лучший способ достичь этого? Благодарю.
Просто сохраните локальную ссылку на ArrayList, которую вы передадите в конструктор пользовательских адаптеров внутри действия владельца. Внутри вашего OnItemClickListener хранятся выбранные индексы внутри логического [], который инициализируется с тем же размером, что и ArrayList. Как только кнопка заголовка выбрана, просто перебирайте булевский массив, а индексы с истинным значением захватите соответствующий индекс внутри ArrayList и сохраните их во временном списке и загрузите в свою базу данных. –
Спасибо Wade. Если я правильно вас понимаю, когда я получаю объект json из веб-приложения php/mysql, я должен сохранить данные в локальном массиве и вытащить значения после нажатия кнопки сохранения? Как получить значения EditTexts, которые находятся в списке, один EditText для каждой строки. – user1911778
явно случай над мышлением java nube. Я получал json-объект от php, мне нужно было объявить, что JsonArray находится в верхней части активности, а затем смог получить к нему доступ и отправить его обратно для обработки. Я переместил HttpURLConnection в задачу async, поскольку он сбой. Мне все еще нужно разобраться, как получить доступ к EditTexts рядом с каждой строкой списка. – user1911778