Я делаю приложение для Android. Для получения данных с сервера приложений, запущенного на моем локальном хосте, с помощью phpmyadmin, я использую нижеописанный скрипт php:
<?php
$host = "localhost";
$db_user = "root" ;
$db_password = "" ;
$db_name = "FCM";
if(isset($_POST["Token"])){
$con = mysqli_connect($host,$db_user,$db_password,$db_name);
$sql = "select * from User";
$res = mysqli_query($con,$sql);
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array('UserName'=>$row[0], 'EmailID'=>$row[1], 'UID'=>$row[2]
));
}
echo json_encode(array("users"=>$result));
mysqli_close($con);
}
?>
И в моем классе Java, чтобы собрать ответ, я использую Okhttp
и ниже описанный код:
public void getDataOKHTTP() {
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder().add("Token","").build();
Request request = new Request.Builder().url("http://.........../fcm/test.php").post(body).build();
System.out.println("@ register a new token ");
try {
Response response= client.newCall(request).execute();
//response.header("Content-Type: application/json");
myJSON = response.body().string();
}catch (IOException e){
e.printStackTrace();
}
}
Но когда я запускаю свое приложение, я получаю,
com.example.apple.fetchdata, PID: 6092
android.os.NetworkOnMainThreadException.
Я был бы очень признателен, если бы вы могли помочь мне изучить и решить эту проблему.
благодарю вас 🙂
Все сетевые операции должны выполняться в фоновом потоке, вы делаете это в основном потоке
Я знаю, что это поздний ответ на этот вопрос.
как Th3Dark0 сказал, все сетевые вызовы должны быть сделаны в фоновом потоке, вы должны использовать enque метод, а не выполнить при совершении вызова в OKHttp.
Вы можете посмотреть здесь, если вы все еще заинтересованы:
Сеть с OkHttp