#android #button #tablelayout
#Android #кнопка #tablelayout
Вопрос:
в моем приложении я получаю значение с сервера и отображаю его в виде tablelayout. Я нигде не сохраняю значение. В начале каждой строки есть кнопка, и когда пользователь нажимает эту кнопку, значение первого столбца и первой строки должно быть вставлено в переменную. Я хочу сохранить значение поля с именем «product_code» в переменной to.
Моя проблема в том, что я пытаюсь извлечь значение поля, но ничего не печатается.
Событие onclick кнопки находится в конце программы, и я пометил его комментариями.
вот мой код
public class FancyStock extends Activity implements View.OnClickListener {
String data = "";
TableLayout tl;
TableRow tr;
TextView label;
ArrayList<Users_fancystock> users = new ArrayList<Users_fancystock>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fancystock);
tl = (TableLayout) findViewById(R.id.main_table);
final GetDatafromDB_fancystock getdb = new GetDatafromDB_fancystock();
new Thread(new Runnable() {
public void run() {
data = getdb.getDataFromDB();
System.out.println(data);
runOnUiThread(new Runnable() {
@Override
public void run() {
users = parseJSON(data);
addData(users);
}
});
}
}).start();
}
public ArrayList<Users_fancystock> parseJSON(String result) {
ArrayList<Users_fancystock> users = new ArrayList<Users_fancystock>();
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i ) {
JSONObject json_data = jArray.getJSONObject(i);
Users_fancystock user = new Users_fancystock();
user.setId(json_data.getInt("id"));
user.setProduct_code(json_data.getString("product_code"));
user.setShapes(json_data.getString("shaps"));
user.setPair(json_data.getString("pair"));
user.setCarats(json_data.getString("carats"));
user.setColor(json_data.getString("color"));
user.setClarity(json_data.getString("clarity"));
user.setService(json_data.getString("service"));
user.setPolish(json_data.getString("polish"));
user.setSymetric(json_data.getString("symetric"));
user.setTables(json_data.getString("tables"));
user.setMeasurements(json_data.getString("measurments"));
user.setFlourscne(json_data.getString("flourscne"));
user.setDescription(json_data.getString("description"));
user.setCerticated(json_data.getString("certificated"));
user.setCcode(json_data.getString("ccode"));
user.setCut(json_data.getString("cut"));
user.setTotal(json_data.getString("total"));
user.setFile(json_data.getString("file"));
users.add(user);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " e.toString());
}
return users;
}
void addHeader(){
/** Create a TableRow dynamically **/
tr = new TableRow(this);
TextView add = new TextView(this);
add.setText("Add");
add.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
add.setPadding(5, 5, 5, 5);
add.setBackgroundColor(Color.parseColor("#BDB76B"));
LinearLayout Ll = new LinearLayout(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
params.setMargins(0, 5, 5, 5);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(add,params);
tr.addView((View)Ll);
/** Creating a TextView to add to the row **/
label = new TextView(this);
label.setText("Product code");
label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
label.setPadding(5, 5, 5, 5);
label.setBackgroundColor(Color.parseColor("#BDB76B"));
Ll = new LinearLayout(this);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
params.setMargins(5, 5, 5, 5);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(label,params);
tr.addView((View)Ll); // Adding textView to tablerow.
/** Creating Qty Button **/
TextView shapes = new TextView(this);
shapes.setText("Shapes");
shapes.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
shapes.setPadding(5, 5, 5, 5);
shapes.setBackgroundColor(Color.parseColor("#BDB76B"));
Ll = new LinearLayout(this);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
params.setMargins(0, 5, 5, 5);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(shapes,params);
tr.addView((View)Ll); // Adding textview to tablerow.
TextView pair = new TextView(this);
pair.setText("Shapes");
pair.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
pair.setPadding(5, 5, 5, 5);
pair.setBackgroundColor(Color.parseColor("#BDB76B"));
Ll = new LinearLayout(this);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
params.setMargins(0, 5, 5, 5);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(pair,params);
tr.addView((View)Ll); // Adding textview to tablerow.
// Add the TableRow to the TableLayout
tl.addView(tr, new TableLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
}
@SuppressWarnings({ "rawtypes" })
public void addData(ArrayList<Users_fancystock> users) {
addHeader();
for (Iterator i = users.iterator(); i.hasNext();) {
for (int j = 0; j < users.size(); j ) {
Users_fancystock p = (Users_fancystock) i.next();
/** Create a TableRow dynamically **/
tr = new TableRow(this);
///-----------------------button initialization here-------------------------------------------------------
Button btn = new Button(this);
btn.setTag(j);
System.out.println(btn.getTag());
btn.setText("Add to Basket");
// btn.setTextSize();
btn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
// btn.setTag(mLinks.get(index));
btn.setOnClickListener(this);
LinearLayout Ll = new LinearLayout(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
params.setMargins(5, 2, 2, 2);
params.width = 200;
params.height = 60;
// btn.setLayoutParams(new LinearLayout.LayoutParams(10, 100));
Ll.addView(btn, params);
tr.addView((View) Ll);
/** Creating a TextView to add to the row **/
label = new TextView(this);
label.setText(p.getproduct_code());
label.setId(p.getId());
label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
label.setPadding(5, 5, 5, 5);
////label.setBackgroundColor(Color.parseColor("#BDB76B"));
Ll = new LinearLayout(this);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
params.setMargins(5, 2, 2, 2);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(label, params);
tr.addView((View) Ll); // Adding textView to tablerow.
/** Creating Qty Button **/
TextView place = new TextView(this);
place.setText(p.getShapes());
place.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
place.setPadding(5, 5, 5, 5);
// place.setBackgroundColor(Color.parseColor("#BDB76B"));
Ll = new LinearLayout(this);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
params.setMargins(0, 2, 2, 2);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(place, params);
tr.addView((View) Ll); // Adding textview to tablerow.
label = new TextView(this);
label.setText(p.getpair());
label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
label.setPadding(5, 5, 5, 5);
////label.setBackgroundColor(Color.parseColor("#BDB76B"));
Ll = new LinearLayout(this);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
params.setMargins(5, 2, 2, 2);
//Ll.setPadding(10, 5, 5, 5);
Ll.addView(label, params);
tr.addView((View) Ll); // Adding textView to tablerow.
// Add the TableRow to the TableLayout
tl.addView(tr, new TableLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}
}
}
///==============onclick event here---------------------------
public void onClick(View v)
{
int k=(Integer)v.getTag();
System.out.println("int k" k);
Users_fancystock rowRecord= users.get(k);
System.out.println(rowRecord);
}
}
это то, что печатается. В последней строке выводится значение «rowrecord».
07-07 11:00:58.452 10932-10982/com.diamond.traders D/dalvikvm﹕ GC_FOR_ALLOC freed 328K, 3% free 11906K/12264K, paused 16ms, total 16ms
07-07 11:00:58.492 10932-10982/com.diamond.traders I/System.out﹕ [{"id":"1","product_code":"qweq","shaps":"weqwe","pair":"qwe","carats":"qwe","color":"qwe","clarity":"qwe","service":"qwe","polish":"qwe","symetric":"eqwe","tables":"qweqqwew","measurments":"eqw","flourscne":"eqwwwfqw","description":"sfsafasfsa","certificated":"safas","ccode":"asf","cut":"asfas","total":"fa","file":"sfasf"},{"id":"2","product_code":"sdas","shaps":"das","pair":"das","carats":"fasfa","color":"sfasf","clarity":"asfas","service":"fas","polish":"sdg","symetric":"sdg","tables":"sdgsd","measurments":"gsdgsdgsd","flourscne":"sdgsdg","description":"sdgsdg","certificated":"sdgs","ccode":"dgsd","cut":"dsdgsdg","total":"sdgsdg","file":"sdgsdgtrurt"}]
07-07 11:00:58.512 10932-10932/com.diamond.traders I/System.out﹕ 0
07-07 11:00:58.522 10932-10932/com.diamond.traders I/System.out﹕ 1
07-07 11:00:59.273 10932-10932/com.diamond.traders I/System.out﹕ int k0
07-07 11:00:59.273 10932-10932/com.diamond.traders I/System.out﹕ com.diamond.traders.Users_fancystock@421c7998
Комментарии:
1. Помогает ли это, если вы используете like,
System.out.println(rowRecord.getId()); System.out.println(rowRecord.getProductCode());
? Вам нужно будет сгенерировать параметр getter setter в классеUsers_fancystock
2. позвольте мне попробовать, и я дам вам знать
3. Это сработало идеально. Спасибо. я использовал System.out.println(rowRecord.getproduct_code()); и получил результат, как и ожидалось. Большое вам спасибо.
4. Отлично. Я добавил ответ 🙂 удачного кодирования.
5. Только один неприятный вопрос, я хочу отправить это значение с помощью Json, не могли бы вы сказать мне, как преобразовать rowRecord.getProductCode() в строку. Я знаю, как использовать JSON, но я всегда отправляю строковое значение
Ответ №1:
Вы пытаетесь напечатать объект класса напрямую. Таким образом, он просто выдает вывод в виде : com.diamond.traders.Users_fancystock@421c7998
Используйте его следующим образом:
public class Users_fancystock{
String id;
String productCode;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode;
}
}
Для печати:
Users_fancystock rowRecord= users.get(k);
System.out.println(rowRecord.getProductCode());
Это должно сработать.
Комментарии:
1. это то, что я сделал, и это сработало, спасибо за ответ. Только один неприятный вопрос, я хочу отправить это значение с помощью Json, не могли бы вы сказать мне, как преобразовать rowRecord.getProductCode() в строку. Я знаю, как использовать JSON, но я всегда отправляю строковое значение.
2.
rowRecord.getProductCode()
является только строкой. Просто используйтеString code = rowRecord.getProductCode();
, и вы получите готовый к использованию строковый код. @SamvidKulkarni3. @SamvidKulkarni Как вы переходите на JSON?
4. httpclient=новый DefaultHttpClient(); httppost= новый HttpPost(» 192.168.0.105/test/registration.php » ); nameValuePairs = новый список массивов<NameValuePair>(); nameValuePairs.add(новая базовая пара значений(«код продукта», значение. toString().trim())); httppost.setEntity(новый UrlEncodedFormEntity(nameValuePairs)); response=httpclient.execute(httppost);
5. @SamvidKulkarni хорошо, так в чем проблема с этим?