0

In my application, i am first getting data from the server then displaying it on the screen in form of table and then i am sending it back to the server according to user. There is a button in the starting of the each row and when the user presses that button, the first column of that row is extracted and then send back to the server. The server retrieves the data from that table and stores it in another table.

I have marked the button onclick event using comments....

here is my code

public class FancyStock extends Activity implements View.OnClickListener {

    String data = "";
    TableLayout tl;
    TableRow tr;
    TextView label,tv;
   // Button btn;
   HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    List<NameValuePair> nameValuePairs;
    ProgressDialog dialog = null;

    ArrayList<Users_fancystock> users = new ArrayList<Users_fancystock>();



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fancystock);

        tl = (TableLayout) findViewById(R.id.main_table);

        final GetDatafromDB_fancystock getdb = new GetDatafromDB_fancystock();
        new Thread(new Runnable() {
            public void run() {
                data = getdb.getDataFromDB();
                System.out.println(data);

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        users = parseJSON(data);
                        addData(users);
                    }
                });

            }
        }).start();



    }

    public ArrayList<Users_fancystock> parseJSON(String result) {
        ArrayList<Users_fancystock> users = new ArrayList<Users_fancystock>();
        try {
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {
                JSONObject json_data = jArray.getJSONObject(i);
                Users_fancystock user = new Users_fancystock();
                user.setId(json_data.getInt("id"));
                user.setProduct_code(json_data.getString("product_code"));
                user.setShapes(json_data.getString("shaps"));
                user.setPair(json_data.getString("pair"));
                user.setCarats(json_data.getString("carats"));
                user.setColor(json_data.getString("color"));
                user.setClarity(json_data.getString("clarity"));
                user.setService(json_data.getString("service"));
                user.setPolish(json_data.getString("polish"));
                user.setSymetric(json_data.getString("symetric"));
                user.setTables(json_data.getString("tables"));
                user.setMeasurements(json_data.getString("measurments"));
                user.setFlourscne(json_data.getString("flourscne"));
                user.setDescription(json_data.getString("description"));
                user.setCerticated(json_data.getString("certificated"));
                user.setCcode(json_data.getString("ccode"));
                user.setCut(json_data.getString("cut"));
                user.setTotal(json_data.getString("total"));
                user.setFile(json_data.getString("file"));
                users.add(user);
            }
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
        return users;
    }



    void addHeader(){
        /** Create a TableRow dynamically **/
        tr = new TableRow(this);

        TextView add = new TextView(this);
        add.setText("Add");
        add.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        add.setPadding(5, 5, 5, 5);
        add.setBackgroundColor(Color.parseColor("#BDB76B"));
        LinearLayout Ll = new LinearLayout(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 5, 5, 5);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(add,params);
        tr.addView((View)Ll);

        /** Creating a TextView to add to the row **/
        label = new TextView(this);
        label.setText("Product code");

        label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        label.setPadding(5, 5, 5, 5);
        label.setBackgroundColor(Color.parseColor("#BDB76B"));
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(5, 5, 5, 5);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(label,params);
        tr.addView((View)Ll);  // Adding textView to tablerow.

        /** Creating Qty Button **/
        TextView shapes = new TextView(this);
        shapes.setText("Shapes");
        shapes.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        shapes.setPadding(5, 5, 5, 5);
        shapes.setBackgroundColor(Color.parseColor("#BDB76B"));
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 5, 5, 5);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(shapes,params);
        tr.addView((View)Ll); // Adding textview to tablerow.

        TextView pair = new TextView(this);
        pair.setText("Shapes");
        pair.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        pair.setPadding(5, 5, 5, 5);
        pair.setBackgroundColor(Color.parseColor("#BDB76B"));
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 5, 5, 5);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(pair,params);
        tr.addView((View)Ll); // Adding textview to tablerow.




        // Add the TableRow to the TableLayout
        tl.addView(tr, new TableLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

    @SuppressWarnings({ "rawtypes" })
    public void addData(ArrayList<Users_fancystock> users) {

        addHeader();

        for (Iterator i = users.iterator(); i.hasNext();) {
            for (int j = 0; j < users.size(); j++) {

                Users_fancystock p = (Users_fancystock) i.next();

                /** Create a TableRow dynamically **/
                tr = new TableRow(this);


                Button btn = new Button(this);
                btn.setTag(j);
                System.out.println(btn.getTag());

                btn.setText("Add to Basket");
                // btn.setTextSize();
                btn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
                // btn.setTag(mLinks.get(index));
                btn.setOnClickListener(this);
                LinearLayout Ll = new LinearLayout(this);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT);
                params.setMargins(5, 2, 2, 2);
                params.width = 200;
                params.height = 60;
                // btn.setLayoutParams(new LinearLayout.LayoutParams(10, 100));
                Ll.addView(btn, params);

                tr.addView((View) Ll);


                /** Creating a TextView to add to the row **/
                label = new TextView(this);
                label.setText(p.getproduct_code());
                label.setId(p.getId());
                label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT));
                label.setPadding(5, 5, 5, 5);
                ////label.setBackgroundColor(Color.parseColor("#BDB76B"));
                Ll = new LinearLayout(this);
                params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT);
                params.setMargins(5, 2, 2, 2);
                //Ll.setPadding(10, 5, 5, 5);
                Ll.addView(label, params);
                tr.addView((View) Ll); // Adding textView to tablerow.

                /** Creating Qty Button **/
                TextView place = new TextView(this);
                place.setText(p.getShapes());
                place.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT));
                place.setPadding(5, 5, 5, 5);
                //  place.setBackgroundColor(Color.parseColor("#BDB76B"));
                Ll = new LinearLayout(this);
                params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT);
                params.setMargins(0, 2, 2, 2);
                //Ll.setPadding(10, 5, 5, 5);
                Ll.addView(place, params);
                tr.addView((View) Ll); // Adding textview to tablerow.

                label = new TextView(this);
                label.setText(p.getpair());
                label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT));
                label.setPadding(5, 5, 5, 5);
                ////label.setBackgroundColor(Color.parseColor("#BDB76B"));
                Ll = new LinearLayout(this);
                params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT);
                params.setMargins(5, 2, 2, 2);
                //Ll.setPadding(10, 5, 5, 5);
                Ll.addView(label, params);
                tr.addView((View) Ll); // Adding textView to tablerow.



                tl.addView(tr, new TableLayout.LayoutParams(
                        LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
            }
        }
    }




///----------------------------button onclick event here-----------------------------
    public void onClick(View v)
    {
        int k = (Integer) v.getTag();
        System.out.println("int k" + k);
                Users_fancystock rowRecord = users.get(k);
                String row_productcode = rowRecord.getproduct_code();
                System.out.println(row_productcode);
                login(row_productcode);

    }

    void login(String value){
        try{

            httpclient=new DefaultHttpClient();
            httppost= new HttpPost("http://192.168.0.105/test/book.php"); // make sure the url is correct.
            //add your data
            nameValuePairs = new ArrayList<NameValuePair>();
            // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar,
            nameValuePairs.add(new BasicNameValuePair("productcode",value.trim()));
           // $Edittext_value = $_POST['Edittext_value'];

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            //Execute HTTP Post Request
            response=httpclient.execute(httppost);

            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            final String response = httpclient.execute(httppost, responseHandler);
            System.out.println("Response : " + response);
            runOnUiThread(new Runnable() {
                public void run() {
                    tv.setText("Response from PHP : " + response);
                    dialog.dismiss();
                }
            });

            if(response.equalsIgnoreCase("Booking")){
                runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(FancyStock.this, "Booking successful", Toast.LENGTH_SHORT).show();
                    }
                });


            }else{
                Toast.makeText(FancyStock.this, "Problem in Booking", Toast.LENGTH_SHORT).show();

            }

        }catch(Exception e){
            dialog.dismiss();
            System.out.println("Exception : " + e.getMessage());
        }
    }
}

here is my php code

<?php
$hostname_localhost ="localhost";
$database_localhost ="testdb";
$username_localhost ="root";
$password_localhost ="";
$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost)
or
trigger_error(mysql_error(),E_USER_ERROR);

mysql_select_db($database_localhost, $localhost);

$productcode = $_POST['productcode'];


$query_search = "INSERT INTO checkorder  SELECT * from fancystock where product_code = '$productcode'";
$query_exec = mysql_query($query_search) or die(mysql_error());
//$rows = mysql_num_rows($query_exec);
//echo $rows;
 echo "Booking";
?>

here is the error

 07-07 12:10:51.035    3638-3638/com.diamond.traders W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4157dba8)
    07-07 12:10:51.045    3638-3638/com.diamond.traders E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.diamond.traders, PID: 3638
        java.lang.NullPointerException
                at com.diamond.traders.FancyStock.login(FancyStock.java:740)
                at com.diamond.traders.FancyStock.onClick(FancyStock.java:697)
                at android.view.View.performClick(View.java:4438)
                at android.view.View$PerformClick.run(View.java:18422)
                at android.os.Handler.handleCallback(Handler.java:733)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5001)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:515)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
                at dalvik.system.NativeStart.main(Native Method)


here is new exception error after removing dialog.dismiss();
07-07 12:23:50.016    6387-6387/com.diamond.traders I/System.out﹕ Exception : null
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ android.os.NetworkOnMainThreadException
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:112)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at java.net.Socket.connect(Socket.java:843)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-07 12:23:50.016    6387-6387/com.diamond.traders W/System.err﹕ at com.diamond.traders.FancyStock.login(FancyStock.java:714)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at com.diamond.traders.FancyStock.onClick(FancyStock.java:697)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at android.view.View.performClick(View.java:4438)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at android.view.View$PerformClick.run(View.java:18422)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at android.os.Looper.loop(Looper.java:136)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5001)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
07-07 12:23:50.026    6387-6387/com.diamond.traders W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
Samvid Kulkarni
  • 129
  • 1
  • 5
  • 14
  • `java.lang.NullPointerException at FancyStock.java:740`, what is in that line? – Shayan Pourvatan Jul 07 '14 at 06:42
  • as @ρяσѕρєя K said, dialog is null – Shayan Pourvatan Jul 07 '14 at 06:47
  • not working. I even removed the entire block, still i am getting same error – Samvid Kulkarni Jul 07 '14 at 06:49
  • `tv` is null, so your code goes to catch Statement, in catch you dismiss your dialog that is null too, so your app crashed, if you remove dialog from catch you got NPE but your app not crashed, so solution is initialize `tv` and `dialog` – Shayan Pourvatan Jul 07 '14 at 06:54
  • you can't do network IO on UI thread, you do this in `login` method so you get `NetworkOnMainThreadException`, see http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception – Shayan Pourvatan Jul 07 '14 at 06:57
  • StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); worked well for me, but i will change my code to asynctask later. – Samvid Kulkarni Jul 07 '14 at 07:06

2 Answers2

1

Probably dialog instance is null because you are not initializing dialog on Button click. check dialog instance for null before calling dismiss() method as :

if(dialog !=null){
 if(dialog.isShowing())
   dialog.dismiss();
}
ρяσѕρєя K
  • 132,198
  • 53
  • 198
  • 213
  • not working. I even removed the entire block, still i am getting same error. – Samvid Kulkarni Jul 07 '14 at 06:49
  • @SamvidKulkarni: you are also not initializing `tv` instance of TextView before `tv.setText("Response from PHP : " + response);` line – ρяσѕρєя K Jul 07 '14 at 06:50
  • i found the issue, there were two dialog.dismiss(); and i removed both of them and error is gone, now i am getting Exception : null as i am printing exception, any suggestion. Toast notifications are not working either – Samvid Kulkarni Jul 07 '14 at 06:52
  • @SamvidKulkarni : update latest logcat stacktrace in question to get more help – ρяσѕρєя K Jul 07 '14 at 06:55
  • 1
    @SamvidKulkarni: `NetworkOnMainThreadException` to fix this issue see [android.os.NetworkOnMainThreadException](http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception) and [ Quick fix for NetworkOnMainThreadException ](http://stackoverflow.com/questions/12650921/quick-fix-for-networkonmainthreadexception) posts – ρяσѕρєя K Jul 07 '14 at 06:57
  • i see, so i have to use asynctask instead to running networking on mainthread. – Samvid Kulkarni Jul 07 '14 at 07:00
  • StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); worked well for me, but i will change my code to asynctask later. thanks for the help – Samvid Kulkarni Jul 07 '14 at 07:07
0

i think you forgot to mention

dialog = new ProgressDialog(getApplicationContext());

if system cant find dialog it will return NullPointerException

and follow ρяσѕρєя K's solution too..

this may help you..

Pragnesh Ghoda シ
  • 8,318
  • 3
  • 25
  • 40
  • i found the issue, there were two dialog.dismiss(); and i removed both of them and error is gone, now i am getting Exception : null as i am printing exception, any suggestion. Toast notifications are not working either – Samvid Kulkarni Jul 07 '14 at 06:52