从Node.js服务器中的Java Android应用程序接收JSON,并将其插入到Mongodb数据库

问题描述 投票:0回答:1

所以我尝试使用 Node.js 服务器将数据从 Java Andoid 应用程序插入到 Mongodb 数据库。但是我的 JSON 对象是空的(正如我所想的)并且读取值是“未定义”。我正在使用 mongodb Atlas。 插入工作正常,但插入的是“null”

这是 Node.js 代码:

const express = require('express')
const { MongoClient } = require("mongodb")
const dotenv = require("dotenv")
 
const bodyParser = require('body-parser'); 

dotenv.config()

const app = express()

const uri = process.env.ATLAS_URI || ""

const client = new MongoClient(uri)

let connectedCLient, db

async function connectToMDB(){

    try{
        connectedCLient = await client.connect()
        console.log("Connected to MongoDb")
    } catch(err) {
        console.log(err)
    } finally{
        db = connectedCLient.db("myDatabase")
    }

}



app.listen(3000, ()=>{
    console.log("Listening on port 3000...")
})

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

connectToMDB();

async function insert(data) {
    try {
      const database = client.db("myDatabase");
      const users = database.collection("users");
      
      const doc = {
        name: data,
      }
      const result = await users.insertOne(doc);
      console.log(`A document was inserted with the _id: ${result.insertedId}`);
    } finally {
      
    }
  }

app.get("/users", async (req, res) =>{
    try{
        let collection = await db.collection("users")
        let users = await collection.find().toArray()
            
        res.status(200).json(users)
    } catch(err){
        res.status(500).json({error: "Users cannot be return"})
    }

})

//it's a function where i'm trying to insert data

app.post('/postdata', (req, res) => { 
    let data = req.body.data;

    insert(data).catch(console.dir)


    res.status(200).json({ 
        message: "Data received successfully " + data
    }); 
}); 

这是我的java代码:


import android.app.Activity;
import android.app.DownloadManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Date;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    Button btnSubmit;

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

        btnSubmit = findViewById(R.id.submit);

        final RequestQueue queue = Volley.newRequestQueue(this);
        final String url = "http://10.0.2.2:3000/postdata";


        queue.start();

        btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String name = "John";

                HashMap<String, String> params = new HashMap<String, String>();
                params.put("name", name.toString());

                JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
                        url,
                        new JSONObject(params),
                        new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                                try {
                                    Toast.makeText(MainActivity.this, response.getString("message"), Toast.LENGTH_SHORT).show();
                                } catch (JSONException err) {
                                    err.printStackTrace();
                                }
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this, "error.getMessage()", Toast.LENGTH_SHORT).show();
                    }
                });
                queue.add(jsonObjectRequest);



            }
        });

    }

}

如果有人还有其他更简单、更好或更合适的方法,我将非常感激。

谢谢

诗。我是编程初学者,所以请友善:)

java android node.js json mongodb
1个回答
0
投票

在您的代码中,Java 代码中使用的密钥与 Node.js 代码中预期的密钥之间存在细微的不匹配。要对齐它们,请进行以下更改:

Node.js code
app.post('/postdata', (req, res) => { 
let data = req.body.name; // update to use "name"

insert(data).catch(console.dir)

res.status(200).json({ 
    message: "Data received successfully " + data
  }); 
});

还有

Java Code
btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

    String name = "John";

    HashMap<String, String> params = new HashMap<String, String>();
    params.put("name", name); // use "name" instead of "data"

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
            url,
            new JSONObject(params),
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        Toast.makeText(MainActivity.this, response.getString("message"), Toast.LENGTH_SHORT).show();
                    } catch (JSONException err) {
                        err.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(MainActivity.this, "error.getMessage()", Toast.LENGTH_SHORT).show();
        }
    });
    queue.add(jsonObjectRequest);
}
});

这些调整应确保用于从 Android 发送数据的密钥与 Node.js 中预期的密钥一致,解决 Node.js 中接收“未定义”数据的问题。

© www.soinside.com 2019 - 2024. All rights reserved.