Adding a New Product (Write)
7. Create a new view and acivity to add a new product into mysql database. Create a simple form which contains EditText for product name, price and description.
Create a new xml file and name it as add_product.xml and paste the following code to create a simple form.
add_product.xml
<? xml version = "1.0" encoding = "utf-8" ?> android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" > <!-- Name Label --> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Product Name" android:paddingLeft = "10dip" android:paddingRight = "10dip" android:paddingTop = "10dip" android:textSize = "17dip" /> <!-- Input Name --> < EditText android:id = "@+id/inputName" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_margin = "5dip" android:layout_marginBottom = "15dip" android:singleLine = "true" /> <!-- Price Label --> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Price" android:paddingLeft = "10dip" android:paddingRight = "10dip" android:paddingTop = "10dip" android:textSize = "17dip" /> <!-- Input Price --> < EditText android:id = "@+id/inputPrice" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_margin = "5dip" android:layout_marginBottom = "15dip" android:singleLine = "true" android:inputType = "numberDecimal" /> <!-- Description Label --> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Description" android:paddingLeft = "10dip" android:paddingRight = "10dip" android:paddingTop = "10dip" android:textSize = "17dip" /> <!-- Input description --> < EditText android:id = "@+id/inputDesc" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_margin = "5dip" android:layout_marginBottom = "15dip" android:lines = "4" android:gravity = "top" /> <!-- Button Create Product --> < Button android:id = "@+id/btnCreateProduct" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Create Product" /> </ LinearLayout > |
8. Now create new Activity to insert a new product into mysql database. Create a class file and name it as NewProductActivity.java and type the following code. In the following code
-> First new product data is read from the EditText form and formatted into a basic params.
-> A request is made to create_product.php to create a new product through HTTP post.
-> After getting json response from create_product.php, If success bit is 1 then list view is refreshed with newly added product.
-> A request is made to create_product.php to create a new product through HTTP post.
-> After getting json response from create_product.php, If success bit is 1 then list view is refreshed with newly added product.
package com.example.androidhive; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class NewProductActivity extends Activity { // Progress Dialog private ProgressDialog pDialog; JSONParser jsonParser = new JSONParser(); EditText inputName; EditText inputPrice; EditText inputDesc; // url to create new product private static String url_create_product = "https://api.androidhive.info/android_connect/create_product.php" ; // JSON Node names private static final String TAG_SUCCESS = "success" ; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.add_product); // Edit Text inputName = (EditText) findViewById(R.id.inputName); inputPrice = (EditText) findViewById(R.id.inputPrice); inputDesc = (EditText) findViewById(R.id.inputDesc); // Create button Button btnCreateProduct = (Button) findViewById(R.id.btnCreateProduct); // button click event btnCreateProduct.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { // creating new product in background thread new CreateNewProduct().execute(); } }); } /** * Background Async Task to Create new product * */ class CreateNewProduct extends AsyncTask<String, String, String> { /** * Before starting background thread Show Progress Dialog * */ @Override protected void onPreExecute() { super .onPreExecute(); pDialog = new ProgressDialog(NewProductActivity. this ); pDialog.setMessage( "Creating Product.." ); pDialog.setIndeterminate( false ); pDialog.setCancelable( true ); pDialog.show(); } /** * Creating product * */ protected String doInBackground(String... args) { String name = inputName.getText().toString(); String price = inputPrice.getText().toString(); String description = inputDesc.getText().toString(); // Building Parameters List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add( new BasicNameValuePair( "name" , name)); params.add( new BasicNameValuePair( "price" , price)); params.add( new BasicNameValuePair( "description" , description)); // getting JSON Object // Note that create product url accepts POST method JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST" , params); // check log cat fro response Log.d( "Create Response" , json.toString()); // check for success tag try { int success = json.getInt(TAG_SUCCESS); if (success == 1 ) { // successfully created product Intent i = new Intent(getApplicationContext(), AllProductsActivity. class ); startActivity(i); // closing this screen finish(); } else { // failed to create product } } 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 done pDialog.dismiss(); } } } |
Reading, Updating and Deleting a Single Product
9. If you notice the AllProductsActivity.java, In listview i am launching EditProductAcivity.java once a single list item is selected. So create xml file called edit_product.xml and create a form which is same as create_product.xml.
edit_product.xml
<? xml version = "1.0" encoding = "utf-8" ?> android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical" > <!-- Name Label --> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Product Name" android:paddingLeft = "10dip" android:paddingRight = "10dip" android:paddingTop = "10dip" android:textSize = "17dip" /> <!-- Input Name --> < EditText android:id = "@+id/inputName" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_margin = "5dip" android:layout_marginBottom = "15dip" android:singleLine = "true" /> <!-- Price Label --> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Price" android:paddingLeft = "10dip" android:paddingRight = "10dip" android:paddingTop = "10dip" android:textSize = "17dip" /> <!-- Input Price --> < EditText android:id = "@+id/inputPrice" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_margin = "5dip" android:layout_marginBottom = "15dip" android:singleLine = "true" android:inputType = "numberDecimal" /> <!-- Description Label --> < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Description" android:paddingLeft = "10dip" android:paddingRight = "10dip" android:paddingTop = "10dip" android:textSize = "17dip" /> <!-- Input description --> < EditText android:id = "@+id/inputDesc" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_margin = "5dip" android:layout_marginBottom = "15dip" android:lines = "4" android:gravity = "top" /> < LinearLayout android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:orientation = "horizontal" > <!-- Button Create Product --> < Button android:id = "@+id/btnSave" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Save Changes" android:layout_weight = "1" /> <!-- Button Create Product --> < Button android:id = "@+id/btnDelete" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "Delete" android:layout_weight = "1" /> </ LinearLayout > </ LinearLayout > |