REST API - Android Studio、Node.js、Firebase

Posted

技术标签:

【中文标题】REST API - Android Studio、Node.js、Firebase【英文标题】:REST 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 【参考方案1】:

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

【讨论】:

你好 nasch,显然对要求有误解,我现在已经解决了。我应该使用 Firebase 或 Node.js,而不是两者。我确实在使用 Retrofit 和 Postman。感谢您的回复。 太棒了,很高兴你明白了。

以上是关于REST API - Android Studio、Node.js、Firebase的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio项目REST api

通过 REST API 发布变量 - Visual Studio Team Services

证明 REST API 项目的 Visual Studio 升级的合理性

使用 Visual Studio 2017 负载测试测试具有不同请求主体的 REST API

ASP.NET Core 项目的 Visual Studio 中的“REST API 客户端”选项?

android studio 如何修改api版本