2014-04-18 2 views
0

제품 ID, 설명, 수량 및 총 가격 배열을 데이터베이스에 저장해야합니다. 나는 json 파서 클래스와 userfunctions 클래스를 정의했다. 이 전에는 각 변수에 대해 Json의 단일 값만 보냈습니다. 내 현재 코드를 기반으로 배열로 보낼 문제가 있습니다. 아래 코드는 제품 배열입니다.안드로이드에서 JSON 배열을 PHP로 보내십시오

public class ScreenSecondFragment extends Fragment { 

public ScreenSecondFragment(){} 
public double pFinalPrice; 
public double[] pTotalPrice; 
public String[] sPID; 
public String[] sProduct; 
public String[] sQuantity; 
public String[] sTotalPrice; 
public String sFinalPrice; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_secondscreen, container, false); 
    TextView showCartContent = (TextView)rootView.findViewById(R.id.showCart); 
    final Button thirdBtn  = (Button) rootView.findViewById(R.id.third); 

    //Get Global Controller Class obiect (see application tag in AndroidManifest.xml) 
    final Controller aController = (Controller) getActivity().getApplicationContext(); 

    // Get Cart Size 
    final int cartSize = aController.getCart().getCartSize(); 


    if(cartSize >0) 
    { 
     for(int i=0;i<cartSize;i++) 
     { 
      final int counter = i; 
      // Get probuct data from product data arraylist 
      String pID = aController.getProducts(i).getProductId(); 
      sPID[i] = pID; 
      String pName = aController.getProducts(i).getProductName(); 
      sProduct[i] = pName; 
      double pPrice = aController.getProducts(i).getProductPrice(); 
      int pQuantity = aController.getProducts(i).getProductQuantity(); 
      sQuantity[i] = Integer.toString(pQuantity); 
      pTotalPrice[i] = pPrice * pQuantity; 
      sTotalPrice[i] = Double.toString(pTotalPrice[i]); 

      TableRow row= new TableRow(this.getActivity()); 
      row.setBackgroundColor(android.graphics.Color.WHITE); 

      TextView product = new TextView(this.getActivity()); 
      product.setText(pName+" "); 
      product.setTextSize(15); 
      //Add textView to LinearLayout 
      row.addView(product); 

      TextView price = new TextView(this.getActivity()); 
      price.setText(String.format("RM %.2f",pPrice)); 
      price.setTextSize(15); 
      //Add textView to LinearLayout 
      row.addView(price); 

      TextView quantity = new TextView(this.getActivity()); 
      quantity.setText(pQuantity+"  "); 
      quantity.setTextSize(15); 
      //Add textView to LinearLayout 
      row.addView(quantity); 

      TextView totalprice = new TextView(this.getActivity()); 
      totalprice.setText(String.format("RM %.2f",pTotalPrice[i])); 
      totalprice.setTextSize(15); 
      //Add textView to LinearLayout 
      row.addView(totalprice); 

      //Update final price 
      pFinalPrice += pTotalPrice[i]; 

      final int index = i; 
      Log.i("TAG", "index :" + index); 
      // Get product instance for index 

      final ModelProducts tempProductObiect = aController.getProducts(index); 

      final Button btnRemove = new Button(this.getActivity()); 
      btnRemove.setId(i+1); 
      btnRemove.setText("Delete"); 

      btnRemove.setOnClickListener(new OnClickListener() 
      { 
       @Override public void onClick(View v) 
       { 

        if(aController.getCart().checkProductInCart(tempProductObiect)) 
        { 
         // Product not Exist in cart so add product to 
         // Cart product arraylist 
         aController.getCart().removeProducts(tempProductObiect); 

         pFinalPrice -= pTotalPrice[counter]; 
         sFinalPrice = Double.toString(pFinalPrice); 
         finalprice.setText(String.format("RM %.2f",pFinalPrice)); 
         Toast.makeText(getActivity().getApplicationContext(), "Now Cart size: "+aController.getCart().getCartSize(), 
           Toast.LENGTH_LONG).show(); 
        } 
        // row is your row, the parent of the clicked button 
        View row = (View) v.getParent(); 
        // container contains all the rows, you could keep a variable somewhere else to the container which you can refer to here 
        ViewGroup container = ((ViewGroup)row.getParent()); 
        // delete the row and invalidate your view so it gets redrawn 
        container.removeView(row); 
        container.invalidate(); 

       } 
      }); 

      row.addView(btnRemove); 

      ll.addView(row,i+1, params);    
     } 
    } 


    thirdBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if(cartSize >0) 
      { 

       FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); 
       mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
       mFragmentTransaction.replace(R.id.frame_container, new BillingAddressOriFragment(), "Cart"); 
       mFragmentTransaction.commit(); 
      } 
      else 
       Toast.makeText(getActivity().getApplicationContext(), 
         "Shopping cart is empty.", 
         Toast.LENGTH_LONG).show(); 
     } 
    }); 
    return rootView; 
} 

private class ProcessOrder extends AsyncTask<String, String, JSONObject> { 

     private ProgressDialog pDialog; 

      /** This should be arrray of product 
     String username, pid, products, quantity, totalprice, finalprice; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      DatabaseHandler db = new DatabaseHandler(getActivity().getApplicationContext()); 

      HashMap<String,String> user = new HashMap<String, String>(); 
      user = db.getUserDetails(); 

      username = user.get("username"); 

      pDialog = new ProgressDialog(ScreenSecondFragment.this.getActivity()); 
      pDialog.setTitle("Contacting Servers"); 
      pDialog.setMessage("Getting Data ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected JSONObject doInBackground(String... args) { 

       /** This is where I should send the array of product to userFunction class**/ 
      UserFunctions userFunction = new UserFunctions(); 
      JSONObject json = userFunction.orderDetails(username, pid, products, quantity, totalprice, finalprice); 

      Log.d("Button", "Order"); 
      return json; 


     } 


    } 

public void NetAsync(View view){ 
    new ProcessOrder().execute(); 
} 
       } 

이것은 json 파서를 사용하여 값을 PHP로 보내야하는 사용자 함수 클래스입니다. 그러나 배열로 보낼 변환 할 생각이 없어.

public class UserFunctions { 
private JSONParser jsonParser; 

//URL of the PHP API 
private static String orderURL = "http://www.xxx.com/xxxx_login_api/"; 

private static String order_tag = "order"; 

// constructor 
public UserFunctions(){ 
    jsonParser = new JSONParser(); 
} 


/** 
* Function store order details 
**/ 
public JSONObject orderDetails(String username, String pid, String products, String quantity, String totalprice, String finalprice) { 
    // Building Parameters 
    List params = new ArrayList(); 
    params.add(new BasicNameValuePair("tag", billing_tag)); 
    params.add(new BasicNameValuePair("pid", pid)); 
    params.add(new BasicNameValuePair("username", username)); 
    params.add(new BasicNameValuePair("products", products)); 
    params.add(new BasicNameValuePair("quantity", quantity)); 
    params.add(new BasicNameValuePair("totalprice", totalprice)); 
    params.add(new BasicNameValuePair("final", finalprice)); 
    JSONObject json = jsonParser.getJSONFromUrl(orderURL,params); 
    return json; 
} 


    } 
} 

JSON 파서 클래스입니다.

public class JSONParser { 
static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 
// constructor 
public JSONParser() { 
} 
public JSONObject getJSONFromUrl(String url, List params) { 
    // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     httpPost.setEntity(new UrlEncodedFormEntity(params)); 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
     Log.e("JSON", json); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 
    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 
    // return JSON String 
    return jObj; 
} 
} 

내가
표 아래와 같이 MySQL의 테이블에 배열 데이터를 저장해야합니다 열 view_order : OrderID를, 제품 ID (외부 키), 수량, TOTAL_PRICE, final_final

나는 방법을 알고 싶은 JSON을 편집하고 PHP 코드를 작성하여 JSON을 디코딩하고 데이터베이스에 저장하십시오. 감사합니다

답변

0

는 MySQL 데이터베이스에 데이터를 삽입이 API 파일을보십시오

<?php 
    if (isset($_POST['OrderID'])) 
    { 
      $OrderID =$_POST['OrderID']; 
      $ProductID = $_POST['ProductID']; 
      $quantity = $_POST['quantity']; 
      $total_price = $_POST['total_price']; 
      $finalprice = $_POST['finalprice']; 
    $sql = mysql_query("INSERT INTO view_order(OrderID,ProductID,quantity,total_price,finalprice) VALUES('$OrderID','$ProductID','$quantity','$total_price','$finalprice')")or die(mysql_error()); 
    $count1 = mysql_num_rows($sql); 
    if($count1==1) 
     { 
      echo json_encode($response); 
     } 
    else{ 
      echo "no data insert"; 
     }  
    } 
    ?> 
관련 문제