如何计算JSON数据和发布数据的价格?

时间:2015-07-03 04:56:01

标签: android json post

我正在创建一个Android应用程序,我正在尝试通过JSON从Restful Web服务中检索数据。

我已经通过从Restful Web服务(来自URL)获取和发布JSON数据来执行调用 通过this教程

所以在这里我需要添加价格*数量 如下例所示:

enter image description here

但我不知道如何为JSON数据发布此计算 我用Google搜索并试了几个其他选项.... 任何人都可以建议我这样的Post JSON数据..

我跟着this发布了POST JSON数据

但是这应该是完成OnClick,它应该要求添加输入数量。 离线(db)它可能但是对于Custom Listview(Async listview-Online)我无法构建

请让我知道这种用途...... 我谷歌很多选择,但我帮助少了....

6 个答案:

答案 0 :(得分:2)

您可以使用此json结构数据发布到服务器:

{
"date": "2015-07-03",
"item": [
    {
        "itemname": "xyz",
        "quantity": 6,
        "price": 80
    },
    {
        "itemname": "abc",
        "quantity": 6,
        "price": 80
    }
],
"total": "960",
"currency": "Rs."
}

答案 1 :(得分:2)

涉及金钱的所有事情你都应该使用<input type="text" name="currency" value="@Html.Action("GetCurrentCurrency","Currency");" /> 如何将数据发布到服务器,因为长时间的数据是安全的。

我会使用volley lib。它会照顾很多东西,而不是你,你应该深入研究,它会为你节省很多时间:http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

另外,我会将 GSON 用于json对象。它也很简单,例如create class:

BigDecimal

和刚创建json一样:

 public class Money{
    String name;
    int quantay;
    BigDecimal rate;
    BigDecimal total;

    /* make seters and getters */
}

就是这样。那么你需要Money类中的构造函数。

答案 2 :(得分:2)

当我理解你的问题时,我试图提供如下答案。我希望你理解模型类的概念,这会让生活更轻松。

步骤1: 首先创建一个模型类并使其成为Serializable以传递模型对象,因为我可以看到您有两个活动,一个用于产品列表,第二个用于计费。在这里,您可以根据您的要求添加/删除一些字段。

public class Product implements Serializable {
    public String productName;
    public int price;
    public int quantity;
    public int total;
}

步骤2:现在,我假设您知道如何使用 gson 库,link1和{将数据分配给ArrayList userProducts {3}}

步骤3:下一步是在listview setOnItemClickListener中计算 total = price * quantity ,就像这样,

Product product = userProducts.get(postiton);
product.total = product.price * product.quantity;

步骤4:将带有Seri​​alizable对象的arraylist从一个活动发送到另一个活动,

    Intent intent = new Intent(ProductActivity.this, BillingActivity.class);
    intent.putExtra("user_products", userProducts);
    startActivity(intent);

步骤5:获取结算活动中的值

    if (getIntent() != null) {
        userProducts = (ArrayList<Product>) getIntent()
                .getSerializableExtra("user_products");
    }

步骤6:现在您的问题是如何发布它们?问题在于您为产品列表创建了jsonarray,为其他一些字段创建了jsonobject,然后您可以将主jsonobject作为字符串发送,非常好link2

    try {
        JSONObject mainJObject = new JSONObject();
        JSONArray productJArray = new JSONArray();
        for (int i = 0; i < userProducts.size(); i++) {
            JSONObject productJObject = new JSONObject();
            productJObject.put("productname", userProducts.get(i).productName);
            productJObject.put("price", userProducts.get(i).price);
            productJObject.put("quantity", userProducts.get(i).quantity);
            productJObject.put("total", userProducts.get(i).total);
            productJArray.put(productJObject);
        }
        mainJObject.put("products", productJArray);
        mainJObject.put("grandd_total", grandTotal);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

看起来应该是这样,

        {
          "products": [
            {
              "productname": "p1",
              "price": "15",
              "quantity": "6",
              "total": 90
            },
            {
              "productname": "p2",
              "price": "25",
              "quantity": "4",
              "total": 100
            }
          ],
          "grandd_total": 190
        }

答案 3 :(得分:1)

这个答案对你有何帮助。 你能读懂json吗?

所以通过json对象试试这个: -

    Double Rate = Double.parseDouble(jsonobject.getString("Rate"));//put api parameter
    int Qty= Integer.parseInt(jsonobject.getString("Qty"));
    Double total = Rate * Qty;
   //set total on your textview lable
    textview.settext(""+total);

并保存在本地数据库中,何时需要发布,然后将数据库发布到服务器。

答案 4 :(得分:1)

我希望在将数据发布到php数据库之前计算数据。您可以使用以下内容:

double a = 1.50;
double b = 2.00;
double c = a * b;

使用HTTPPost方法(顺便说一下折旧)然后你需要做类似下面的事情:

public void postData(){  
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://www.yourdomain.com/post.php");  

        try {
            List nameValuePairs = new ArrayList(1);
            nameValuePairs.add(new BasicNameValuePair("data1", c));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  

            HttpResponse response = httpclient.execute(httppost);

            InputStream is = response.getEntity().getContent();
            BufferedInputStream bis = new BufferedInputStream(is);
            ByteArrayBuffer baf = new ByteArrayBuffer(20);

            int current = 0;

            while((current = bis.read()) != -1){
                baf.append((byte)current);
            }  

            text = new String(baf.toByteArray());
            txtvw.setText(text);
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
    }

希望这会有所帮助:)

答案 5 :(得分:1)

希望这对您有所帮助,如上所述我已经检查过,您需要Grand_Total在Bill Webservice上发帖。 你只是计算并将这些数据传递给Bill Screen,就像上面给出的那样

if (getIntent() != null) {
        userProducts = (ArrayList<Product>) getIntent()
                .getSerializableExtra("user_products");
    }

根据结算屏幕中的外观,这里有一个Grand Total缺少传递

(这里我们试图获得总计Rs.905)

double Grand_total = 0.0;

for(int i=0;i<userProducts.size();i++)
{
Product product = userProducts.get(postiton);
product.total = product.price * product.quantity;
Grand_total +=product.total;
}

现在,您可以将所有必需的数据传递给结算webservice,如

try {
        JSONObject mainJObject = new JSONObject();
        JSONArray productJArray = new JSONArray();
        for (int i = 0; i < userProducts.size(); i++) {
            JSONObject productJObject = new JSONObject();
            productJObject.put("productname", userProducts.get(i).productName);
            productJObject.put("price", userProducts.get(i).price);
            productJObject.put("quantity", userProducts.get(i).quantity);
            productJObject.put("total", userProducts.get(i).total);
            productJObject.put("total", userProducts.get(i).total);

            productJArray.put(productJObject);
        }
        mainJObject.put("products", productJArray);
        mainJObject.put("Grand_total", Grand_total);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }