当数据库中的数据发生变化时,ListView上的新数据未直接显示

时间:2015-01-28 01:41:31

标签: android mysql json listview arraylist

这是我的第一篇文章,我想问一些问题 我的应用程序使用JSON从数据库获取和发布数据,我每次发布或获取一些数据时都会这样做。

这个过程是这样的:
        OrderListActivity - UpdateQtyActivity - OrderListActivity

OrderListActivity 显示用户订单并可以更改订单数量,当用户按下按钮buttonOk时,它将处理数据并自动返回 OrderListActivity 再次显示订单列表。

但问题是,当用户从 UpdateQtyActivity 返回 OrderListActivity 时,listview中的数据没有改变 ,尽管数据库中的数据是更改 ,它仍然显示旧数据。

我需要回到另一个活动或进行3次OrderListActivity - UpdateQtyActivity - OrderListActivity进程,以便更改数据

我以前一直试图使用adapter.notifyDataSetChanged() ArrayList.clear();,但它没有给我一些东西......

这是 OrderListActivity 源代码:

public class OrderListActivity extends Activity implements OnClickListener {

ListView listProduct, listOrder, listDrink;
String FABId, FABPrice, FABName, ORDQty, SLSId;
TextView totalHarga, OrderPrice, QUANTITY;
String sum;

JSONObject jsonOrder;
Button buttonMin, buttonPlus, buttonOk;

SimpleAdapter adapter;

private ProgressDialog pDialog;
private String url_orderlist = "http://websitelink/get_order_details.php";
private static final String TAG_SUCCESS = "success";

private static final String TAG_FABID = "fab_id";
private static final String TAG_NAME = "fab_name";
private static final String TAG_PRICE = "fab_price";
private static final String TAG_SLSID = "sls_id";

private static final String TAG_ORD = "ord";
private static final String TAG_QTY = "ord_qty";
private static final String TAG_SUBTOTAL = "ord_subttl";
private static final String TAG_STATUS = "ord_status";
private static final String TAG_SUMSALES = "salesSum";
private static final String TAG_SUM = "sls_sum";

// Creating JSON Parser object
JSONParser jParser = new JSONParser();

ArrayList<HashMap<String, String>> productsListOrder = null;
HashMap<String, String> map = null;

// products JSONArray
JSONArray OrderList = null;
JSONObject SalesSummary = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_ordlist);
    Intent i = getIntent();

    // getting product id (pid) from intent
    SLSId = i.getStringExtra(TAG_SLSID);

    productsListOrder = new ArrayList<HashMap<String, String>>();
    productsListOrder.remove(map);
    productsListOrder.isEmpty();
    productsListOrder.clear();
    TextView SLS = (TextView) findViewById(R.id.ordslsId);
    SLS.setText(SLSId);

    Button buttonBack = (Button) findViewById(R.id.buttonBack);
    buttonBack.setOnClickListener(this);
    buttonBack.setText("<");

    totalHarga = (TextView) findViewById(R.id.totalHarga);

    listOrder = (ListView) findViewById(R.id.orderList);

    adapter = new SimpleAdapter(OrderListActivity.this, productsListOrder,
            R.layout.list_order, new String[]{TAG_SLSID, TAG_FABID, TAG_STATUS,
            TAG_QTY, TAG_NAME, TAG_PRICE, TAG_SUBTOTAL},
            new int[]{R.id.slsId, R.id.ordFabId, R.id.ordStatus, R.id.ordQty, R.id.ordName,
                    R.id.ordPrice, R.id.ordSubtotal}) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final View view = super.getView(position, convertView, parent);

            buttonMin = (Button) view.findViewById(R.id.buttonMinQty);
            buttonMin.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    OrderPrice = (TextView) view.findViewById(R.id.ordPrice);
                    TextView OrderSubttl = (TextView) view.findViewById(R.id.ordSubtotal);
                    QUANTITY = (TextView) view.findViewById(R.id.ordQty);
                    int iQty = Integer.parseInt(QUANTITY.getText().toString());
                    int QUANTI = iQty - 1;

                    int iOrdPrice = Integer.parseInt(OrderPrice.getText().toString());
                    int PRICE = QUANTI*iOrdPrice;
                    OrderSubttl.setText(new Integer(PRICE).toString());
                    QUANTITY.setText(new Integer(QUANTI).toString());
                }
            });

            buttonPlus = (Button) view.findViewById(R.id.buttonPlusQty);
            buttonPlus.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    jsonOrder.remove(TAG_SUCCESS);
                    OrderPrice = (TextView) view.findViewById(R.id.ordPrice);
                    TextView OrderSubttl = (TextView) view.findViewById(R.id.ordSubtotal);
                    QUANTITY = (TextView) view.findViewById(R.id.ordQty);
                    int iQty = Integer.parseInt(QUANTITY.getText().toString());
                    int QUANTI = iQty + 1;

                    int iOrdPrice = Integer.parseInt(OrderPrice.getText().toString());
                    int PRICE = QUANTI*iOrdPrice;
                    OrderSubttl.setText(new Integer(PRICE).toString());
                    QUANTITY.setText(new Integer(QUANTI).toString());
                }
            });

            buttonOk = (Button) view.findViewById(R.id.buttonOk);
            buttonOk.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    SLSId = ((TextView) findViewById(R.id.slsId)).getText()
                            .toString();
                    FABId = ((TextView) view.findViewById(R.id.ordFabId)).getText()
                            .toString();
                    FABPrice = ((TextView) view.findViewById(R.id.ordPrice)).getText()
                            .toString();
                    ORDQty = ((TextView) view.findViewById(R.id.ordQty)).getText()
                            .toString();

                    Intent in = new Intent(OrderListActivity.this.getApplicationContext(),
                            UpdateQtyActivity.class);
                    in.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    in.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                    // sending pid to next activity
                    in.putExtra(TAG_SLSID, SLSId);
                    in.putExtra(TAG_FABID, FABId);    // Starting new intent
                    in.putExtra(TAG_PRICE, FABPrice);    // Starting new intent.
                    in.putExtra(TAG_QTY, ORDQty);    // Starting new intent
                    in.putExtra(TAG_STATUS, "increase");

                    // starting new activity and expecting some response back
                    startActivityForResult(in,50);
                }
            });

            return view;
        }
    };

    new LoadOrder().execute();

}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // if result code 100
    if (resultCode == 50) {
        // if result code 100 is received
        // means user edited/deleted product
        // reload this screen again
        Intent intent = getIntent();
        finish();
        startActivity(intent);
        } else {

    }

}

@Override
public void onBackPressed() {
    //super.onBackPressed(); // Comment this super call to avoid calling finish()
}


@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.buttonBack:
            // Create custom dialog object

            Intent in = new Intent(OrderListActivity.this.getApplicationContext(),
                    MainActivity.class);
            in.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            // sending id to next activity
            in.putExtra(TAG_SLSID, SLSId);    // Starting new intent
            startActivity(in);
            finish();
            // closing this screen
            break;
    }

}

class LoadOrder extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(OrderListActivity.this);
        pDialog.setMessage("Memuat Pesanan...\n Tunggu Sebentar...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();



    }

    /**
     * getting All products from url
     */
    protected String doInBackground(String... args) {
        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("sls_id", SLSId));

        // getting JSON string from URL
        jsonOrder = jParser.makeHttpRequest(url_orderlist, "GET", params);


        // Check your log cat for JSON reponse
        Log.d("Orders : ", jsonOrder.toString());

        try {
            // Checking for SUCCESS TAG
            int successOrder = jsonOrder.getInt(TAG_SUCCESS);


            if (successOrder == 1) {
                // products found
                // Getting Array of Products
                OrderList = jsonOrder.getJSONArray(TAG_ORD);
                // looping through All Products
                for (int i = 0; i < OrderList.length(); i++) {
                    JSONObject c = OrderList.getJSONObject(i);

                    // Storing each json item in variable
                    String slsid = c.getString(TAG_SLSID);
                    String fabid = c.getString(TAG_FABID);
                    String name = c.getString(TAG_NAME);
                    String price = c.getString(TAG_PRICE);
                    String qty = c.getString(TAG_QTY);
                    String subtotal = c.getString(TAG_SUBTOTAL);
                    String status = c.getString(TAG_STATUS);

                    // creating new HashMap
                    map = new HashMap<String, String>();
                    // adding each child node to HashMap key => value
                    map.put(TAG_SLSID, slsid);
                    map.put(TAG_FABID, fabid);
                    map.put(TAG_NAME, name);
                    map.put(TAG_PRICE, price);
                    map.put(TAG_QTY, qty);
                    map.put(TAG_SUBTOTAL, subtotal);
                    map.put(TAG_STATUS, status);

                    // adding HashList to ArrayList
                    productsListOrder.add(map);
                }

                SalesSummary = jsonOrder.getJSONObject(TAG_SUMSALES);
                sum = SalesSummary.getString(TAG_SUM);


            } else {

            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * *
     */
    protected void onPostExecute(String file_url) {
        runOnUiThread(new Runnable() {
            public void run() {
                // updating UI from Background Thread
                // updating listview
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    public void run() {
                        pDialog.dismiss();
                        adapter.notifyDataSetChanged();
                        listOrder.getFirstVisiblePosition();
                        listOrder.getLastVisiblePosition();
                        listOrder.setAdapter(adapter);
                        ((SimpleAdapter)listOrder.getAdapter()).notifyDataSetChanged();
                        totalHarga.setText(sum);
                    }}, 3000);  // 3000 milliseconds
            }
        });
    }
} }

这是 UpdateQtyActivity 代码:

public class UpdateQtyActivity extends Activity {

private ProgressDialog pDialog;
String SLSId, FABId, FABPrice;
String FABName, FABQty, FABSubttl;
String Status, Stats;
Integer Qty;

private static String url_updquantity = "http://websitelink/update_qty.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_FAB = "fab";
private static final String TAG_FABID = "fab_id";
private static final String TAG_SLSID = "sls_id";
private static final String TAG_NAME = "fab_name";
private static final String TAG_PRICE = "fab_price";
private static final String TAG_QTY = "ord_qty";
private static final String TAG_SUBTTL = "ord_subttl";

JSONParser jParser = new JSONParser();

ArrayList<HashMap<String, String>> productsListFood;
ArrayList<HashMap<String, String>> productsListDrink;
ArrayList<HashMap<String, String>> productsListOrder;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blank);

    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    Intent i = getIntent();

    // getting product id (pid) from intent
    SLSId = i.getStringExtra(TAG_SLSID);
    FABId = i.getStringExtra(TAG_FABID);
    FABPrice = i.getStringExtra(TAG_PRICE);
    FABName = i.getStringExtra(TAG_NAME);
    FABQty = i.getStringExtra(TAG_QTY);
    FABSubttl = i.getStringExtra(TAG_SUBTTL);

    // Getting complete product details in background thread
    new GetProductDetails().execute();
}

class GetProductDetails extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(UpdateQtyActivity.this);
        pDialog.setMessage("Memproses Pesanan Anda");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Getting product details in background thread
     */
    protected String doInBackground(String... params) {

        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                // Check for success tag
                int success;
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("fab_id", FABId));
                    params.add(new BasicNameValuePair("fab_name", FABName));
                    params.add(new BasicNameValuePair("fab_price", FABPrice));
                    params.add(new BasicNameValuePair("sls_id", SLSId));
                    params.add(new BasicNameValuePair("ord_qty", FABQty));
                    params.add(new BasicNameValuePair("ord_subttl", FABSubttl));

                    // getting product details by making HTTP request
                    // Note that product details url will use GET request
                    JSONObject jsonOrder = jParser.makeHttpRequest(url_updquantity,
                            "POST", params);

                    // check log cat fro response
                    Log.d("Input Data", jsonOrder.toString());

                    // json success tag
                    int successOrd = jsonOrder.getInt(TAG_SUCCESS);

                            if (successOrd == 1) {
                                // successfully created product
                                Stats = "2";
                                Intent i = getIntent();
                                //Intent i = new Intent(getApplicationContext(), OrderListActivity.class);
                                i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                                i.putExtra(TAG_SLSID, SLSId);
                                i.putExtra(Status,Stats);
                                setResult(50, i);
                                finish();

                                // closing this screen
                            } else {
                                // failed to create product
                            }

                        // product with this pid found

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        return null;
    }


    /**
     * After completing background task Dismiss the progress dialog
     * *
     */
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once got all details
        pDialog.dismiss();
    }
}

}

输出图片:Here

我很乐意听到回应,抱歉我的英语不好 谢谢

1 个答案:

答案 0 :(得分:0)

请你这样试试,

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // if result code 50
    if (resultCode == 50) {
        // if result code 50 is received
        // means user edited/deleted product
        // **reload previous data**
        new LoadOrder().execute();
    }
}

更新:您需要在LoadOrder类的onPreExecute方法中清除productsListOrder ArrayList。

/**
 * Before starting background thread Show Progress Dialog
 */
@Override
protected void onPreExecute() {
    super.onPreExecute();
    pDialog = new ProgressDialog(OrderListActivity.this);
    pDialog.setMessage("Memuat Pesanan...\n Tunggu Sebentar...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    pDialog.show();

    productsListOrder.clear();
}