I have simple "gadget" based on Arduino. It is connected to the wlan of my house and sending web requests to it turns on/off a red LED indicating that I'm busy/free in my room. This works fine when called from a browser or from my small winforms application. It is called synchronous, it is just enough, no need for async calls.
But, I tried to create a android app that sends the same requests, no success. I have read many topics, tried different ways etc. The app has this row in manifest file:
android:networkSecurityConfig="#xml/network_security_config"
Maybe something is still missing. This might be very very basic, but I haven't been able to get it working. Code:
public void onViewCreated(#NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.buttonFirst.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
OkHttpClient client = new OkHttpClient();
String url = "http://192.168.100.12/LED=ON";
Request req = new Request.Builder()
.url(url)
.build();
try {
client.newCall(req).execute();
} catch (IOException | RuntimeException e) {
e.printStackTrace();
}
NavHostFragment.findNavController(FirstFragment.this)
.navigate(R.id.action_FirstFragment_to_SecondFragment);
}
});
}
It fails on execute call. The app enters the catch section, but there's no understandable description in e. And of course, my mobile phone is connected to the same wlan.
Stack trace:
I/System.out: port:80
W/System.err: android.os.NetworkOnMainThreadException
W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
W/System.err: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:389)
W/System.err: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
W/System.err: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
W/System.err: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
W/System.err: at java.net.Socket.connect(Socket.java:631)
W/System.err: at okhttp3.internal.platform.AndroidPlatform.connectSocket(AndroidPlatform.kt:63)
W/System.err: at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
W/System.err: at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
W/System.err: at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
W/System.err: at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
W/System.err: at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
W/System.err: at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
W/System.err: at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
W/System.err: at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
W/System.err: at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
W/System.err: at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
W/System.err: at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
W/System.err: at com.example.donotdisturb.FirstFragment$1.onClick(FirstFragment.java:52)
W/System.err: at android.view.View.performClick(View.java:6603)
W/System.err: at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
W/System.err: at android.view.View.performClickInternal(View.java:6576)
W/System.err: at android.view.View.access$3100(View.java:780)
W/System.err: at android.view.View$PerformClick.run(View.java:26088)
W/System.err: at android.os.Handler.handleCallback(Handler.java:873)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err: at android.os.Looper.loop(Looper.java:193)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6705)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
Related
I created a MQTT broker using Mosquitto library (version - 1.6.12). and created Android mobile app, which acts as paho clients(Libraries Used - 'libs/org.eclipse.paho.client.mqttv3-1.2.0.jar', 'libs/org.eclipse.paho.android.service-1.1.1.jar')
Trying to connect android app to the local Mosquitto broker. I'm able to connect through Android emulator Getting Socket issue When I try with real android device.
Android Code:
MqttAndroidClient client;
String clientId = MqttClient.generateClientId();
//Since broker is running in the same system I gave my local IP-ADDRESS - 192.168.0.100
//Port - 1883
client = new MqttAndroidClient(this.getApplicationContext(), "tcp://192.168.0.100:1883", clientId);
try {
MqttConnectOptions options = new MqttConnectOptions();
options.setKeepAliveInterval(60);
Log.d(TAG, "MqttConnectOptions : "+options.toString());
IMqttToken token = client.connect(options);
token.setActionCallback(new IMqttActionListener() {
#Override
public void onSuccess(IMqttToken asyncActionToken) {
Log.d(TAG, "onSuccess");
}
#Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Log.d(TAG, "onFailure ");
exception.printStackTrace();
}
});
} catch (MqttException e) {
e.printStackTrace();
}
Android Studio Logs:
2020-10-06 20:27:31.775 23972-23972/com.exam.mqttwithlibs W/System.err: MqttException (0) - java.net.SocketTimeoutException: failed to connect to /192.168.0.100 (port 1883) from /192.168.0.102 (port 37459) after 30000ms
2020-10-06 20:27:31.778 23972-23972/com.exam.mqttwithlibs W/System.err: at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
2020-10-06 20:27:31.779 23972-23972/com.exam.mqttwithlibs W/System.err: at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:715)
2020-10-06 20:27:31.779 23972-23972/com.exam.mqttwithlibs W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
2020-10-06 20:27:31.779 23972-23972/com.exam.mqttwithlibs W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2020-10-06 20:27:31.780 23972-23972/com.exam.mqttwithlibs W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2020-10-06 20:27:31.780 23972-23972/com.exam.mqttwithlibs W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-10-06 20:27:31.780 23972-23972/com.exam.mqttwithlibs W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-10-06 20:27:31.781 23972-23972/com.exam.mqttwithlibs W/System.err: at java.lang.Thread.run(Thread.java:764)
2020-10-06 20:27:31.785 23972-23972/com.exam.mqttwithlibs W/System.err: Caused by: java.net.SocketTimeoutException: failed to connect to /192.168.0.100 (port 1883) from /192.168.0.102 (port 37459) after 30000ms
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err: at libcore.io.IoBridge.connectErrno(IoBridge.java:185)
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err: at libcore.io.IoBridge.connect(IoBridge.java:129)
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err: at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err: at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
2020-10-06 20:27:31.787 23972-23972/com.exam.mqttwithlibs W/System.err: at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
2020-10-06 20:27:31.787 23972-23972/com.exam.mqttwithlibs W/System.err: at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
2020-10-06 20:27:31.787 23972-23972/com.exam.mqttwithlibs W/System.err: at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err: at java.net.Socket.connect(Socket.java:621)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err: at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:84)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err: at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:701)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err: ... 6 more
In above image 192.168.0.100 - System's IP and 192.168.0.102 - Android device IP
Thanks for any help.
Open Port 1883 by following this link https://bytesofgigabytes.com/networking/how-to-open-port-in-windows/ solves this issue
If you use Mosquitto as a server on MacOS, you need edit the config file at /opt/homebrew/etc/mosquitto/mosquitto.conf
listener 1883 -- Specify port number
allow_anonymous true
Then restart Mosquitto
I have this line of code
val event = Gson().fromJson(socketResponse.toString(), com.spaxiappuser.service.booking.event.Event::class.java)
Which throws the error
java.lang.IllegalArgumentException: class android.widget.TextView
declares multiple JSON fields named mMinWidth
My data class is as follows
data class Event(
val tripParams: TripParams? = null,
val onDemand: OnDemand? = null,
#SerializedName("request_id")
val requestId: String? = null,
#SerializedName("driver_userid")
val driverId: String? = null,
val due: Due? = null,
val standard: Standard? = null,
val isToAllowBackPress: Boolean = false
Can anyone please let me know why this is happening?
Here is my stack trace :
W/System.err: java.lang.IllegalArgumentException: class android.widget.TextView declares multiple JSON fields named mMinWidth
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:172)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
W/System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
W/System.err: at com.google.gson.Gson.getAdapter(Gson.java:458)
W/System.err: at com.google.gson.Gson.fromJson(Gson.java:926)
W/System.err: at com.google.gson.Gson.fromJson(Gson.java:892)
W/System.err: at com.google.gson.Gson.fromJson(Gson.java:841)
W/System.err: at com.google.gson.Gson.fromJson(Gson.java:813)
W/System.err: at com.spaxiappuser.service.socket.EventManager.handleEvent(EventManager.kt:35)
W/System.err: at com.spaxiappuser.service.socket.Listener$listen$2.accept(Listener.kt:78)
W/System.err: at com.spaxiappuser.service.socket.Listener$listen$2.accept(Listener.kt:15)
W/System.err: at io.reactivex.internal.operators.observable.ObservableDoOnEach$DoOnEachObserver.onNext(ObservableDoOnEach.java:93)
W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)
W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate$CreateEmitter.onNext(ObservableCreate.java:66)
W/System.err: at com.spaxiappuser.service.socket.Listener$listen$1.subscribe(Listener.kt:50)
W/System.err: at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40)
W/System.err: at io.reactivex.Observable.subscribe(Observable.java:12197)
W/System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
W/System.err: at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
W/System.err: at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/System.err: at java.lang.Thread.run(Thread.java:919)
Any help in identifying the issue will be much appreciated.
One of the classes your model references has a TextView somewhere in it (or extends TextView), and GSON is trying to interpret that as a class to be inflated from JSON.
Find it and either mark that field transient, or otherwise exclude that field.
I am opening a twitter stream to get a constant stream of tweets, but when I attempt to close it I get the following system errors. The errors occur when the method stopStreaming() is called. I am using the Twitter twitter4j for streaming a statuses/filter.
public class FilterTweetsManager implements StatusListener//, Runnable
{
//
public void start(String[] keywords)
{
FilterQuery fq = new FilterQuery();
fq.track(keywords);
twitterStream_.addListener(this);
twitterStream_.filter(fq);
}
public void stopStreaming()
{
Handler handler = new Handler();
handler.post(new Runnable() {
#Override
public void run() {
twitterStream_.cleanUp(); // shutdown internal stream consuming thread
twitterStream_.shutdown(); // Shuts down internal dispatcher thread shared by all TwitterStream instances.
}
});
}
#Override
public void onStatus(twitter4j.Status status) {
Log.d(TAG, "onStatus " + status.getText());
}
//... rest of the StatusListener methods
}
The errors received are:
W/System.err: java.lang.IllegalStateException: Unbalanced enter/exit
W/System.err: at com.android.okhttp.okio.AsyncTimeout.enter(AsyncTimeout.java:62)
W/System.err: at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:209)
W/System.err: at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
W/System.err: at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
W/System.err: at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
W/System.err: at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.readChunkSize(Http1xStream.java:451)
W/System.err: at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.read(Http1xStream.java:435)
W/System.err: at com.android.okhttp.internal.Util.skipAll(Util.java:159)
W/System.err: at com.android.okhttp.internal.Util.discard(Util.java:141)
W/System.err: at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.close(Http1xStream.java:472)
W/System.err: at com.android.okhttp.okio.RealBufferedSource.close(RealBufferedSource.java:396)
W/System.err: at com.android.okhttp.okio.RealBufferedSource$1.close(RealBufferedSource.java:384)
W/System.err: at java.util.zip.InflaterInputStream.close(InflaterInputStream.java:239)
W/System.err: at java.util.zip.GZIPInputStream.close(GZIPInputStream.java:137)
W/System.err: at twitter4j.StatusStreamBase.close(StatusStreamBase.java:335)
W/System.err: at twitter4j.TwitterStreamImpl$TwitterStreamConsumer.close(TwitterStreamImpl.java:685)
W/System.err: at twitter4j.TwitterStreamImpl.cleanUp(TwitterStreamImpl.java:386)
W/System.err: at cat.jorda.tweetfilter.FilterTweetsManager$1.run(FilterTweetsManager.java:63)
W/System.err: at android.os.Handler.handleCallback(Handler.java:789)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98)
W/System.err: at android.os.Looper.loop(Looper.java:164)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6541)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
W/TwitterStreamImpl: Unbalanced enter/exit
W/TwitterStreamImpl: Inflater has been closed
I got SSLException while uploading video to the server via okhttp3.
final OkHttpClient clientOk = new OkHttpClient();
MultipartBody requestBody = new MultipartBody.Builder()
.addFormDataPart("file1", "file",
RequestBody.create(MediaType.parse("video/mp4"), sourceFile))
.addFormDataPart("id", id)
.build();
Request request = new Request.Builder()
.header("x_token", token)
.url(configuration.getApiBaseURLString() + "/path")
.post(requestBody)
.build();
clientOk.newCall(request).enqueue(new Callback() {
#Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "onFailure " + e.getMessage());
}
#Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "onResponse " + response.toString());
}
});
and error is
W/System.err: javax.net.ssl.SSLException: Write error: ssl=0x98e37a40: I/O error during system call, Broken pipe
W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)
W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:771)
W/System.err: at okio.Okio$1.write(Okio.java:80)
W/System.err: at okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:46)
W/System.err: at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286)
W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
W/System.err: at okio.RealBufferedSink.writeAll(RealBufferedSink.java:104)
W/System.err: at okhttp3.RequestBody$3.writeTo(RequestBody.java:118)
W/System.err: at okhttp3.MultipartBody.writeOrCountBytes(MultipartBody.java:171)
W/System.err: at okhttp3.MultipartBody.writeTo(MultipartBody.java:113)
W/System.err: at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:704)
W/System.err: at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:563)
W/System.err: at okhttp3.RealCall.getResponse(RealCall.java:241)
W/System.err: at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
W/System.err: at okhttp3.RealCall.access$100(RealCall.java:30)
W/System.err: at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127)
W/System.err: at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
W/System.err: at java.lang.Thread.run(Thread.java:818)
Video size is 15.5 MB. Any thought what I'm doing wrong ?
Thank you in advance!
I am able to send sizes below 5MB. And on the backend I was told that set limit 'client_max_body_size' == 60MB
I increased the timeout of okhttp client to 5 minutes:
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(5, TimeUnit.MINUTES);
client.setReadTimeout(5, TimeUnit.MINUTES);
client.setWriteTimeout(5, TimeUnit.MINUTES);
client.interceptors().add(new Interceptor() {
#Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
// Customize the request
Request request = original.newBuilder()
//.header("Accept", "application/json")
.header("Authorization", Constants.SERVICE_AUTH_KEY)
.method(original.method(), original.body())
.build();
// Customize or return the response
return chain.proceed(request);
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.SERVICE_URL)
.client(client)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
I use WCF Webservice, i also increased the timeout time to same thing.
Everything works perfectly fine, but uploading file or image to the server.
Even after increasing timeout on both Android and WCF, I still get the error on android:
java.net.SocketException: sendto failed: ETIMEDOUT (Connection timed
out)
This is the full log
W/System.err: java.net.SocketException: sendto failed: ETIMEDOUT (Connection timed out)
W/System.err: at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:550)
W/System.err: at libcore.io.IoBridge.sendto(IoBridge.java:519)
W/System.err: at java.net.PlainSocketImpl.write(PlainSocketImpl.java:511)
W/System.err: at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
W/System.err: at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269)
W/System.err: at okio.Okio$1.write(Okio.java:80)
W/System.err: at okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:46)
W/System.err: at com.squareup.okhttp.internal.http.HttpConnection$FixedLengthSink.write(HttpConnection.java:302)
W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
W/System.err: at okio.RealBufferedSink.writeAll(RealBufferedSink.java:104)
W/System.err: at com.squareup.okhttp.RequestBody$3.writeTo(RequestBody.java:118)
W/System.err: at com.squareup.okhttp.MultipartBuilder$MultipartRequestBody.writeOrCountBytes(MultipartBuilder.java:277)
W/System.err: at com.squareup.okhttp.MultipartBuilder$MultipartRequestBody.writeTo(MultipartBuilder.java:297)
W/System.err: at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:887)
W/System.err: at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:749)
W/System.err: at com.squareup.okhttp.Call.getResponse(Call.java:268)
W/System.err: at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
W/System.err: at com.mbh.mbhportal.network.NewPortalService$1.intercept(NewPortalService.java:59)
W/System.err: at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:221)
W/System.err: at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
W/System.err: at com.squareup.okhttp.Call.execute(Call.java:79)
W/System.err: at retrofit.OkHttpCall.execute(OkHttpCall.java:116)
W/System.err: at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:111)
W/System.err: at retrofit.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:88)
W/System.err: at rx.Observable$2.call(Observable.java:162)
W/System.err: at rx.Observable$2.call(Observable.java:154)
W/System.err: at rx.Observable$2.call(Observable.java:162)
W/System.err: at rx.Observable$2.call(Observable.java:154)
W/System.err: at rx.Observable$2.call(Observable.java:162)
W/System.err: at rx.Observable$2.call(Observable.java:154)
W/System.err: at rx.Observable.unsafeSubscribe(Observable.java:8098)
W/System.err: at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
W/System.err: at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
W/System.err: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390)
W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:234)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:153)
W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
W/System.err: at java.lang.Thread.run(Thread.java:838)
W/System.err: Caused by: libcore.io.ErrnoException: sendto failed: ETIMEDOUT (Connection timed out)
W/System.err: at libcore.io.Posix.sendtoBytes(Native Method)
W/System.err: at libcore.io.Posix.sendto(Posix.java:151)
W/System.err: at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
W/System.err: at libcore.io.IoBridge.sendto(IoBridge.java:517)
W/System.err: ... 40 more
What timeout is this ETIMEDOUT !?