Android Question Restful API service

khwarizmi

Active Member
Licensed User
Longtime User
Hi all

How to use http post request to implement Restful API service?
 
the terminator screen:
 

Attachments

  • 1-23-2020 1-17-54 PM.png
    1-23-2020 1-17-54 PM.png
    16.6 KB · Views: 385
Upvote 0
the terminator screen:

I think the valid SQL should be:
SQL:
INSERT INTO Customers (first_name, last_name) SELECT "Ali", "Adil"
or
SQL:
INSERT INTO Customers (first_name, last_name) VALUES ("Ali", "Adil")

I never see SQL written as
SQL:
INSERT INTO Customers SET first_name = NULL, last_name = NULL
Edit: Found this is valid for MySQL
 
Last edited:
Upvote 0
this is the problem, It is supposed to take the values of the fields from the JSON array and place them in the sql statment according to my nodejs code.
B4X:
const sql = require("./db.js");

// constructor
const custloc = function(cust) {
this.first_name  = cust.first_name;
this.last_name = cust.last_name;
this.country_code = cust.country_code;
this.mobile = cust.mobile;
this.email = cust.email;
this.created_user_id = cust.created_user_id;
this.created_time = cust.created_time;
this.updated_user_id = cust.updated_user_id;
this.updated_time = cust.updated_time;
this.is_active = cust.is_active;
this.pw = cust.pw;
};

custloc.create = (newcustloc, result) => {
  sql.query("INSERT INTO customers SET ?", newcustloc, (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(err, null);
      return;
    }

    console.log("created cust: ", { id: res.insertId, ...newcustloc });
    result(null, { id: res.insertId, ...newcustloc });
  });
};

custloc.findById = (id, result) => {
  sql.query(`SELECT * FROM customers WHERE id = ${id}`, (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(err, null);
      return;
    }

    if (res.length) {
      console.log("found cust: ", res[0]);
      result(null, res[0]);
      return;
    }

    // not found custloc with the id
    result({ kind: "not_found" }, null);
  });
};

custloc.getAll = result => {
  sql.query("SELECT * FROM customers", (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(null, err);
      return;
    }

    console.log("custs: ", res);
    result(null, res);
  });
};

custloc.updateById = (id, cust, result) => {
    
  sql.query(
    "UPDATE customers SET first_name = ? , last_name = ? , country_code = ? , mobile = ? , email = ? , created_user_id = ? , created_time = ? , updated_user_id = ? , updated_time = ? , is_active = ? , pw = ? WHERE id = ?",
    [cust.first_name, cust.last_name, cust.country_code , cust.mobile , cust.email , cust.created_user_id, cust.created_time , cust.updated_user_id, cust.updated_time , cust.is_active , cust.pw ,id],
    (err, res) => {
      if (err) {
        console.log("error: ", err);
        result(null, err);
        return;
      }

      if (res.affectedRows == 0) {
        // not found custloc with the id
        result({ kind: "not_found" }, null);
        return;
      }

      console.log("updated cust: ", { id: id, ...cust });
      result(null, { id: id, ...cust });
    }
  );
};

custloc.remove = (id, result) => {
  sql.query("DELETE FROM customers WHERE id = ?", id, (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(null, err);
      return;
    }

    if (res.affectedRows == 0) {
      // not found custloc with the id
      result({ kind: "not_found" }, null);
      return;
    }

    console.log("deleted cust with id: ", id);
    result(null, res);
  });
};

custloc.removeAll = result => {
  sql.query("DELETE FROM customers", (err, res) => {
    if (err) {
      console.log("error: ", err);
      result(null, err);
      return;
    }

    console.log(`deleted ${res.affectedRows} custs`);
    result(null, res);
  });
};

module.exports = custloc;
 
Upvote 0
@Erel already said you:
Maybe you need to set the content type.

@DonMan already said you how:
j.GetRequest.SetContentType("application/json")
try add a AFTER the j.poststring

You don't mention if you've tried.

This is what i'm doing in similar case:
B4X:
    j.PostString("http://192.168.1.12:3000/customers", str)
    j.GetRequest.SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0")
    j.GetRequest.SetContentType("application/json")
    j.GetRequest.Timeout=60
    j.GetRequest.SetContentEncoding("UTF8")
 
Upvote 0
there is no respond. I will try to upload the complete code.
 
Upvote 0
I am based on the NodeJS tutorial from https://bezkoder.com/node-js-rest-api-express-mysql/

I installed Laragon and Postman

As suggested by Erel, DonManfred and Jorge M A, the solution is to add the following line.
B4X:
Job.GetRequest.SetContentType("application/json")

Attached is code I used that successfully add the record.

[CODE lang="b4x" highlight="17"]Sub AddCustomer
Dim Job As HttpJob
Try
Dim Map1 As Map
Map1.Initialize
Map1.Put("email", "[email protected]")
Map1.Put("name", "Ali Adil")
Map1.Put("active", True)
Dim gen As JSONGenerator
gen.Initialize(Map1)
Dim jsn As String
jsn = gen.ToString
Log(jsn)

Job.Initialize("", Me)
Job.PostString("http://172.20.10.3:3000/customers", jsn)
Job.GetRequest.SetContentType("application/json")
Wait For (Job) JobDone(Job As HttpJob)
ProgressDialogHide
If Job.Success Then
Log(Job.GetString)
Else
Log(Job.ErrorMessage)
Job.Release
End If
Catch
Job.Release
LogColor("Error: " & LastException.Message, Colors.Red)
End Try
End Sub[/CODE]
 

Attachments

Last edited:
Upvote 0
Back
Top