我正在创建一个Android应用程序,我正在尝试通过JSON从Restful Web服务中检索数据。
我已经通过从Restful Web服务(来自URL)获取和发布JSON数据来执行调用 通过this教程
所以在这里我需要添加价格*数量 如下例所示:
但我不知道如何为JSON数据发布此计算 我用Google搜索并试了几个其他选项.... 任何人都可以建议我这样的Post JSON数据..
我跟着this发布了POST JSON数据
但是这应该是完成OnClick,它应该要求添加输入数量。 离线(db)它可能但是对于Custom Listview(Async listview-Online)我无法构建
请让我知道这种用途...... 我谷歌很多选择,但我帮助少了....
答案 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:将带有Serializable对象的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();
}