Я использую Retrofit2 с nodejs сервером. когда я звоню на сервер узла в android, журнал android показывает. запрос заканчивается мгновенно. результат этого адреса правильный. когда я go по этому адресу, json результат показывается правильно. но в android я не могу связать android клиента с сервером узла. как вы можете видеть, я получаю сообщение об ошибке, хотя я установил тайм-аут на 1 минуту. Я не знаю, почему я не могу общаться с сервером. Кто-нибудь знает это? в nodejs журнал не показывался.
android журнал
D/OkHttp: --> GET http://192.168.0.xx:5000/api/customers
--> END GET
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.haii.schedulemanager, PID: 8169
java.net.SocketTimeoutException: failed to connect to /192.168.0.xx (port 5000) from /192.0.0.x (port 39078) after 60000ms
at libcore.io.IoBridge.connectErrno(IoBridge.java:185)
at libcore.io.IoBridge.connect(IoBridge.java:129)
at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
at java.net.Socket.connect(Socket.java:621)
at okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.kt:57)
at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:266)
at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:180)
at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:238)
at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:111)
at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:79)
at okhttp3.internal.connection.Transmitter.newExchange$okhttp(Transmitter.kt:163)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:35)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:82)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:84)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:71)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.kt:219)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:194)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
манифест
android:usesCleartextTraffic="true" //this is for http
nodejs
app.get('/api/customers',(req,res)=>{
let today = moment(new Date()).format("YYYY-MM-DD");
let date="";
if(moment().day()===0){
date = getWeekday(moment(new Date()).add('days',7).format("YYYY-MM-DD"),"Saturday");
}else{
date = getWeekday(today,"Saturday");
}
let sql = "select * from customer "+
"where isDeleted=0 and createdDate between '"+today+"' and '"+ date+"'";
const params = ""
console.log(sql);
connection.query(
sql,params,
(err,rows,fields)=>{
console.log(rows);
res.send(rows);
}
)
});
ps: когда я запускаю с эмулятором, меняющим URL на http://10.0.2.2:5000/
, результат получается правильным. но когда я запускаю это на своем телефоне, он показывает вышеуказанную ошибку.
applicationModule
@JvmStatic
@Singleton
@Provides
fun provideTaskNetwork() : ScheduleNetwork {
return Retrofit.Builder()
.baseUrl("http://192.168.0.xx:5000/")
.addConverterFactory(GsonConverterFactory.create())
.client(provideOkhttp())
.build()
.create(ScheduleNetwork::class.java)
interface
interface ScheduleNetwork {
@GET("api/customers")
fun getCustomers(
): Call<CustomerItem>
}