Tôi đang cố gắng sử dụng thư viện Okhttp để kết nối ứng dụng Android của mình với máy chủ thông qua API.Các cuộc gọi không đồng bộ của Android Okhttp
Cuộc gọi api của tôi đang diễn ra khi nhấp vào nút và tôi nhận được android.os.NetworkOnMainThreadException sau. Tôi hiểu rằng điều này là do thực tế tôi đang cố gắng các cuộc gọi mạng trên các chủ đề chính nhưng tôi cũng đang đấu tranh để tìm một giải pháp sạch trên android như thế nào làm cho mã này sử dụng một thread (gọi async).
@Override
public void onClick(View v) {
switch (v.getId()){
//if login button is clicked
case R.id.btLogin:
try {
String getResponse = doGetRequest("http://myurl/api/");
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
String doGetRequest(String url) throws IOException{
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
Trên đây là mã của tôi, và các ngoại lệ được ném trên dòng
Response response = client.newCall(request).execute();
Ive cũng đọc mà Okhhtp hỗ trợ các yêu cầu async nhưng tôi thực sự không thể tìm thấy một giải pháp sạch cho android như hầu hết dường như sử dụng một lớp học mới sử dụng AsyncTask <> ??
Bất kỳ sự giúp đỡ hoặc gợi ý được nhiều đánh giá cao, thankyou ...
Có không cần trong 'try {...} catch (IOException e) {...}' và dĩ nhiên 'doGetRequest (String url) ném IOException {' –
@ V.Kalyuzhnyu Hãy thử .. catch sẽ xử lý lỗi được ném b y 'IOException' của' doGetRequest' – kirtan403
Cảm ơn. Bạn là đúng –