【发布时间】:2017-11-03 10:51:38
【问题描述】:
这是我第一次与 Gson 面对面。我的问题会很长,希望你能理解,我还有更多问题让我卡了大约 1 周。
所以,我有一个ListView,在那里我从另一个Activtity 中获取选定的项目。在此ListView 下,我有一个Button,卖家将商品保存到FireBase,由客户购买。
现在的问题是,每次卖家将购买的商品保存到FireBase 时,我都想枚举(如增量)每个客户并给出一个客户编号。并在页面顶部显示TextView 中的客户数量,其中图片中的数字为 1。但是第二天的枚举必须从 1 开始。所以每一天都必须从 1 开始。
在这个ListView 中,我正在计算所选项目并计算价格总和。
但第二个问题是我不知道如何将 customer number、counted items 和 sum of items 发送到另一个 ListView卡片视图。我想把它放在 Gson 里面。我尝试了一些东西,但我完全迷失了。我的代码在这一刻看起来真的很乱。希望你会明白。
这是我获取所选项目并使用 Toast 显示 counted items 和 sum of items 的代码:
int totalPrice = 0;
for(VanzatorProduse v : Util.getInstance().getVanzatorProduse())
{
int vPrice = Integer.parseInt(v.getPret());
totalPrice = totalPrice + vPrice;
}
Toast.makeText(getApplicationContext(), "Selected products : " + listaProdusePreview.getAdapter().getCount() +"\n"+"Total sum : " + totalPrice , Toast.LENGTH_LONG).show();
Intent sumaProduse = new Intent(FormCumparareActivity.this, VanzatorActivity.class);
sumaProduse.putExtra("sumaProduse", totalPrice);
startActivity(sumaProduse);
String produseSelectate = String.valueOf(listaProdusePreview.getAdapter().getCount());
Intent intent = new Intent(FormCumparareActivity.this, VanzatorActivity.class);
intent.putExtra("produseSelectate", produseSelectate);
startActivity(intent);
Util.getInstance().getVanzatorProduse().removeAll(Util.getInstance().getVanzatorProduse());
客户编号、计数项目和项目总和的对象类:
public class Card {
private Integer numarCumparator;
private String listaProduse;
private Integer sumaProduse;
public Card(Integer numarCumparator, String listaProduse, Integer sumaProduse) {
this.numarCumparator = numarCumparator;
this.listaProduse = listaProduse;
this.sumaProduse = sumaProduse;
}
public Integer getNumarCumparator() {
return numarCumparator;
}
public void setNumarCumparator(Integer numarCumparator) {
this.numarCumparator = numarCumparator;
}
public String getListaProduse() {
return listaProduse;
}
public void setListaProduse(String listaProduse) {
this.listaProduse = listaProduse;
}
public Integer getSumaProduse() {
return sumaProduse;
}
public void setSumaProduse(Integer sumaProduse) {
this.sumaProduse = sumaProduse;
}
这是列表视图适配器的代码:
public class CardArrayAdapter extends ArrayAdapter<Card> {
private static final String TAG = "CardArrayAdapter";
private List<Card> cardList = new ArrayList<Card>();
static class CardViewHolder {
TextView line1;
TextView line2;
TextView line3;
}
public CardArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public void add(Card object) {
cardList.add(object);
super.add(object);
}
@Override
public int getCount() {
return this.cardList.size();
}
@Override
public Card getItem(int index) {
return this.cardList.get(index);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
CardViewHolder viewHolder;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item_card, parent, false);
viewHolder = new CardViewHolder();
viewHolder.line1 = (TextView) row.findViewById(R.id.txtViewNumarCumparator);
viewHolder.line2 = (TextView) row.findViewById(R.id.listaProduse);
viewHolder.line3 = (TextView) row.findViewById(R.id.sumaProduse);
row.setTag(viewHolder);
} else {
viewHolder = (CardViewHolder)row.getTag();
}
Card card = getItem(position);
viewHolder.line1.setText(card.getNumarCumparator());
viewHolder.line2.setText(card.getListaProduse());
viewHolder.line3.setText(card.getSumaProduse());
return row;
}
卡片视图布局:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:descendantFocusability="afterDescendants"
android:orientation="vertical"
android:paddingBottom="15dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:paddingTop="15dp">
<TextView
android:id="@+id/txtViewNumarCumparator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="NumarCumparator" />
<TextView
android:id="@+id/listaProduse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/txtViewNumarCumparator"
android:layout_marginTop="10dp"
android:text="NumarProduse" />
<TextView
android:id="@+id/sumaProduse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="15dp"
android:text="SumaProdsue" />
这是我对 Gson 的尝试,我把它放在 JSONManager 类中:
public class JSONManager {
private static JSONManager instance = null;
protected JSONManager() {
// Exists only to defeat instantiation.
}
public static JSONManager getInstance() {
if (instance == null) {
instance = new JSONManager();
}
return instance;
}
//Create list of Cards because we need to show list for date selected
public List<Card> readJSON(String dateFromCalendar) throws JSONException {
String JSON = SharedPreference.getString(Util.get(), SharedPreference.APP_DATA, SharedPreference.JSON_DATA, "");
String numeVanzator = SharedPreference.getString(Util.get(), SharedPreference.USER_DATA, SharedPreference.NUME_VANZATOR,"");
JSONObject jsonObj = new JSONObject(JSON);
JSONArray contacts = jsonObj.getJSONArray("jsonData");
List<Card> listCard = null;
Card card = null;
listCard = new ArrayList<>();
for (int i =0; i< contacts.length();i++) {
JSONObject c = contacts.getJSONObject(i);
String data = c.getString("data");
if (data.equals(dateFromCalendar)){
String numeVanzato = c.getString("numeVanzator");
if (numeVanzato.equals(numeVanzator)){
Integer numarClient = c.getInt("numarClient");
JSONObject detaliiCos = c.getJSONObject("detaliiCos");
Integer sumaProduse = detaliiCos.getInt("sumaProduse");
String produseselectate = c.getString("produseSelectate");
card = new Card(numarClient, produseselectate, sumaProduse);
listCard.add(card);
}
}
}
return listCard;
} }
我试图从 Gson 获取数据的活动代码。
@Override
protected void onResume() {
super.onResume();
c = Calendar.getInstance();
String numeVanzator = SharedPreference.getString(this, SharedPreference.USER_DATA, SharedPreference.NUME_VANZATOR, "");
if (!numeVanzator.equals("")) {
textViewNumeVanzator.setText(numeVanzator);
}
String jsonData = SharedPreference.getString(getApplicationContext(), SharedPreference.APP_DATA, SharedPreference.JSON_DATA, "");
System.out.println("JSON data" + jsonData);
textViewDataCurenta.setText(getDate(c.getTimeInMillis()));
cardArrayAdapter = new CardArrayAdapter(this, R.layout.list_item_card);
Card card = null;
List<Card> listCard = new ArrayList<Card>();
c = Calendar.getInstance();
try {
String date = getDate(c.getTimeInMillis());
listCard = JSONManager.getInstance().readJSON(date);
} catch (JSONException e) {
e.printStackTrace();
}
for (int i = 0; i <= listCard.size()-1; i++) {
card = listCard.get(i);
cardArrayAdapter.add(card);
}
listViewVanzatorActivity.setAdapter(cardArrayAdapter);
}
现在,一切正常,但是当点击保存Button 时,下一个活动中没有任何内容,也没有错误。
希望你能理解我的问题,我真的需要你的帮助。谢谢!!
【问题讨论】:
标签: android json listview gson