Используя некоторый Log.d, который я проверил, он имеет неправильный формат и что сервер запрашивает тело приложения/json, но мне кажется, что я все делаю правильно. Я включил эту опцию
Код: Выделить всё
android:usesCleartextTraffic="true"
Я также попробовал метод enqueue() вместо метода выполнения() для асинхронного метода почтового запроса, но это не помогло В любом случае это не работает, я не понимаю, почему я должен отправлять свой запрос синхронно, поскольку мне это не нужно, поэтому я переключился обратно
Вот код
Код: Выделить всё
JSONObject jsonObject = new JSONObject();
jsonObject.put("user", "IP-Alby");
jsonObject.put("password", "blabla");
RequestBody requestBody = RequestBody.create(
jsonObject.toString(),
MediaType.parse("application/json; charset=utf-8")
);
Log.d("NetworkRequest", "request created");
Request postRequest = new Request.Builder().url("http://x.x.x.x:25565/api/register").post(requestBody).build();
Response response = client.newCall(postRequest).execute();
int statusCode = response.code();
Log.d("NetworkRequest", "status code: "+statusCode);
String responseBody = response.body().string();
Log.d("NetworkRequest", "Response Body: " + responseBody);
if (response.isSuccessful()) {
Log.d("NetworkRequest", "POST was correct");
String responseBody2 = response.body().string();
Log.d("NetworkRequest", responseBody2);
}
if (!response.isSuccessful()) {
Log.e("NetworkRequest", "something went wrong");
}
Код: Выделить всё
D request created
D status code: 400
D Response Body: Expected application/json content type
E something went wrong
Я бы не стал рассматривать опечатку в URL, потому что я уже тестировал ее другим способом, и это сработало, просто в этом приложении у меня болит голова.
Поможете? Содержимое тела отформатировано правильно, верно?
Добавлено 19 сентября.
Я добавляю информацию о сервере, это в javascript
Код: Выделить всё
const server = http.createServer((req,res) => {
res.setHeader("Access-Control-Allow-Origin", "*" );
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Max-Age', '86400'); // Cache CORS preflight per 24 ore
const pathName= req.url;
if (pathName === "/home") { //open a test page that show the content of file example.txt
console.log("home reacehd");
res.setHeader('Content-Type', 'text/plain');
res.end(example);
}
else if (pathName === '/api/register') { //save data locally
console.log("a request has reached this path");
if(req.method === 'POST'){
handlePostRequest(req, res, async (body) => {
const { username, password } = body;
users.push({username, password});
console.log("Username:", username);
console.log("Password:", password);
//updateDatabase(users);
sendJsonResponse(res, 200, { message: 'Register op was succesfull'});
});
} else {
console.log("not format POST");
}
}
Код: Выделить всё
function handlePostRequest(req, res, callback) {
let body = '';
req.on('data', chunk => {
body += chunk.toString(); // Convert buffer into stirng
});
req.on('end', () => {
if (req.headers['content-type'] === 'application/json') {
try {
const parsedBody = JSON.parse(body); // Parse the body as JSON
callback(parsedBody);
} catch (error) {
res.statusCode = 400; // Bad Request
res.end('Invalid JSON');
}
} else {
res.statusCode = 400; // Bad Request
res.end('Expected application/json content type');
}
});
}
Код: Выделить всё
if (req.headers['content-type'] === 'application/json')
Подробнее здесь: https://stackoverflow.com/questions/789 ... -json-body