【问题标题】:REST API - Android Studio, Node.js, FirebaseREST API - Android Studio、Node.js、Firebase
【发布时间】:2019-02-20 09:11:21
【问题描述】:

我是一名在这家公司参加 OJT 的大学生,我的任务是创建一个使用 REST API 将数据添加到 Firebase 数据库的 Android 应用。该应用程序是一个项目列表应用程序,我需要在其中注册、登录、项目列表视图,并能够添加、编辑和删除项目。我需要使用 Node.js、Android Studio 和 Firebase。我的团队负责人让我学习 REST API、Node.js、JSON、Firebase,我现在有点了解我应该用这些做什么,至少是概念和理论上。

问题在于代码。这是压倒性的。我是 javascript 新手,我刚开始学习它是在给我这个任务的那天(一周前)。而且我不知道如何在 Android Studio 和 Node.js 上创建代码,以便 API 可以处理客户端和服务器之间的请求/响应。请记住,我的截止日期大约为 4-5 周。

我现在的代码非常基础,我什至不确定它们是否正确。现在我只有注册活动和 Node.js 上的服务器。我使用 Android Studio 3.1.4,节点 v8.11.4,npm v5.6.0

aSignUpActivity.java

public class aSignUpActivity extends AppCompatActivity {

EditText etFname, etLname, etEmail, etUname, etPword, etConfPword;
Button btnConfirmSU;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_a_sign_up);

    etFname = (EditText) findViewById(R.id.asuFnameET);
    etLname = (EditText) findViewById(R.id.asuLnameET);
    etEmail = (EditText) findViewById(R.id.asuEmailET);
    etUname = (EditText) findViewById(R.id.asuUnameET);
    etPword = (EditText) findViewById(R.id.asuPwordET);
    etConfPword = (EditText) findViewById(R.id.asuCpwordET);
    btnConfirmSU = (Button) findViewById(R.id.asuConfirmSU);

    btnConfirmSU.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            confirmSignupClicked();
        }
    });
}

public void confirmSignupClicked(){
    String fName = etFname.getText().toString();
    String lName = etLname.getText().toString();
    String eMail = etEmail.getText().toString();
    String uName = etUname.getText().toString();
    String pWord = etPword.getText().toString();
    String cPword = etConfPword.getText().toString();

    if(TextUtils.isEmpty(fName) || TextUtils.isEmpty(lName) || TextUtils.isEmpty(eMail) || TextUtils.isEmpty(uName) || TextUtils.isEmpty(pWord) || TextUtils.isEmpty(cPword)){
        Toast.makeText(this, "Can't leave any text fields empty.", Toast.LENGTH_SHORT).show();
    }
    else{
        Intent intent = new Intent(aSignUpActivity.this, aStartPageActivity.class);
        Toast.makeText(this, "Account created.", Toast.LENGTH_SHORT).show();
        startActivity(intent);
    }
}
}

server.js(我复制粘贴了这些代码并对其进行了编辑以适应我的情况)

var admin = require('firebase-admin')
var serviceAccount = require('./myprivatekey.json')

// var port = process.env.PORT || 3000
// var express = require('express')
// var app = express()
// var bodyParser = require('body-parser')

admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "mydatabase.firebaseio.com"
})

// app.use(bodyParser.urlencoded({extended: true}))
// app.use(bodyParser.json())

var db = admin.database()
var dbRef = db.ref('usersinfo')

//API - SIGN UP USER
function addUser(userid, username, email, password){
    var usersRef = dbRef.child("user")
    usersRef.set({
        "USER ID": userid,
        "USERNAME": username,
        "EMAIL": email,
        "PASSWORD": password,
    })
}

//testing if function works
addUser("test", "test", "test", "test")

//API - ADD ITEM
function addItem(userid, image, name, description){
    var itemsRef = dbRef.child("useritems")
    itemsRef.set({
        "USER ID": userid,
        "IMAGE": image,
        "NAME": name,
        "DESCRIPTION": description
    })
    var itemId = itemsRef.key
}

//testing if function works
addItem("test", "test", "test", "test")

//API - VIEW ITEM
function viewItem(itemId) {
    var itemRef = dbRef.child("useritems/" + itemId)
    itemRef.on("value", function(snapshot) {
      if (snapshot.exists()) {
        console.log(snapshot.val())
        return snapshot.val()
      } else {
        console.log("Cannot view item.", itemId)
        return null
      }
    }, function (errorObject) {
      console.log("error: " + errorObject.code)
    });
  }

//API - EDIT ITEM
function editItem(itemId, editimage, editname, editdescription){
    var itemRef = dbRef.child("useritems/", itemId)
    itemRef.update({
        "IMAGE": editimage,
        "NAME": editname,
        "DESCRIPTION": editdescription
    })
    console.log("Item successfully edited")
    itemRef.on("value", function(snapshot){
        console.log(snapshot.val())
    }, function (errorObject){
        console.log("Edit failed: " + errorObect.code)
    })
}

//API - DELETE ITEM
function deleteItem(itemId){
    itemRef = dbRef.child("useritems/" + itemId)
    itemRef.once("value")
    .then(function(snapshot){
        if(snapshot.exists()){
            console.log("Item removed successfully.")
            return "Item removed."
        }else{
            console.log("Item does not exist")
            return "Error."
        }
    })
    .catch(function(error){
        console.log("deleteItem failed: " + error.code)
    })
}

我要问的是,是否有人可以为我指明如何开始的正确方向?喜欢资源链接?关于我的代码的建议?对初学者友好的东西。 YouTube 和 google 上的大多数示例使用 HTML 作为客户端的前端,或者使用教程作为 Android 聊天应用程序,或者使用 mongoDB/SQL 作为数据库。也许我搜索得不够好?请帮忙。

【问题讨论】:

  • firebase 拥有实时数据库,因此您无需后端编码即可完成所有这些操作
  • 这是真的,但根据要求,我需要使用 node.js 编写自己的 API

标签: android json node.js rest firebase


【解决方案1】:

我会找到一个关于如何制作 node.js REST 应用程序(可能使用 Express)并完成它的教程。使用 Postman 发送请求。让服务器正常工作后,您可以继续使用 Andraid 应用程序。我建议使用 Retrofit 来提出请求。

【讨论】:

  • 你好 nasch,显然对要求有误解,我现在已经解决了。我应该使用 Firebase 或 Node.js,而不是两者。我确实在使用 Retrofit 和 Postman。感谢您的回复。
  • 太棒了,很高兴你明白了。
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2021-11-25
  • 2014-09-12
  • 2016-12-20
  • 2014-04-28
  • 1970-01-01
相关资源
最近更新 更多