#javascript #java #android #node.js
#javascript #java #Android #node.js
Вопрос:
Я создаю приложение на Android studio с использованием Java, и я хочу создать веб-сайт, на котором вы можете редактировать текстовые файлы. Я хочу, чтобы приложение Android подключалось к веб-серверу и извлекало эти файлы. Я просто не понимаю, как соединить это вместе. например, как мне получить текстовый файл из моего node.js сервер для моего приложения для Android. моей первоначальной мыслью было бы отправить HTTP-запрос на сервер, но я понятия не имею, как даже начать его кодировать. Любая помощь была бы очень признательна Заранее спасибо
JAVA
public class MainActivity extends AppCompatActivity {
private static final String SERVER = "http://10.0.2.2:3000/";
private TextView tvServerResponse;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvServerResponse = findViewById(R.id.textView);
Button contactServerButton = findViewById(R.id.button);
contactServerButton.setOnClickListener(onButtonClickListener);
}
View.OnClickListener onButtonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
HttpGetRequest request = new HttpGetRequest();
request.execute();
}
};
public class HttpGetRequest extends AsyncTask<Void, Void, String> {
static final String REQUEST_METHOD = "GET";
static final int READ_TIMEOUT = 15000;
static final int CONNECTION_TIMEOUT = 15000;
@Override
protected String doInBackground(Void... params){
String resu<
String inputLine;
try {
// connect to the server
URL myUrl = new URL(SERVER);
HttpURLConnection connection =(HttpURLConnection) myUrl.openConnection();
connection.setRequestMethod(REQUEST_METHOD);
connection.setReadTimeout(READ_TIMEOUT);
connection.setConnectTimeout(CONNECTION_TIMEOUT);
connection.connect();
// get the string from the input stream
InputStreamReader streamReader = new InputStreamReader(connection.getInputStream());
BufferedReader reader = new BufferedReader(streamReader);
StringBuilder stringBuilder = new StringBuilder();
while((inputLine = reader.readLine()) != null){
stringBuilder.append(inputLine);
}
reader.close();
streamReader.close();
result = stringBuilder.toString();
} catch(IOException e) {
e.printStackTrace();
result = "error";
}
return resu<
}
protected void onPostExecute(String result){
super.onPostExecute(result);
tvServerResponse.setText(result);
}
}
}
JS:
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});`
У меня есть этот код, но он выдает catch в java-коде из строки connection.connect()
я предполагаю, что он не может подключиться к серверу, но я не понимаю, почему
Ответ №1:
Вы можете использовать очень популярную HTTP-библиотеку под названием OkHttp ( https://github.com/square/okhttp )
Я написал этот фрагмент кода, чтобы вы могли адаптировать его в своем приложении:
Java:
public void downloadTxt(String url) {
Request request = new Request.Builder()
.url(url)
.build();
OkHttpClient client = new OkHttpClient();
client
.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
//error reaching your site
e.printStackTrace();
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
if(response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error with code: " response.code());
}
}
});
}
Kotlin:
fun downloadTxt(url: String) {
val request: Request = Request.Builder()
.url(url)
.build()
val client = OkHttpClient()
client
.newCall(request)
.enqueue(object : Callback() {
fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
fun onResponse(call: Call, response: Response) {
if (response.isSuccessful()) {
println(response.body().string())
} else {
println("Error with code: ${response.code()}")
}
}
})
}
Комментарии:
1. Я пытаюсь просто подключить приложение к серверу в данный момент, а затем настроить ответ с сервера, на данный момент я только что получил его, возвращая Hello World. я отредактировал свой вопрос, чтобы включить код, который я пытаюсь использовать
2. я пытался реализовать это, но, похоже, он все еще не может подключиться, он даже не может подключиться к
https://reqres.in/api/users?page=2//
. Есть ли что-нибудь еще, кроме добавления в манифест Android:<uses-permission android:name="android.permission.INTERNET"/>
?3. Почему вы добавляете двойную косую черту в конце URL-адреса? Это reqres.in/api/users?page=2 и это работает. Может быть, на устройстве возникли проблемы с подключением?
4. вот о чем я думаю, это не работает без них
//
, я не слишком уверен, как устранить проблему с подключением на устройстве5. пожалуйста, поделитесь сутью со всем классом, чтобы мы могли ее увидеть