It's a simple helloworld project using endpoints generated from MyBean
and MyEndpoint
classes which come default with the Endpoints module
. The emulator I use is Genymotion which I connect to through the /10.0.2.2 ip. When I access the endpoints server locally "localhost:8080" in my web browser it works just fine but when I run/debug it using emulator in AndroidStudio I get this timeout exception :
-3571/com.serjsmor.anotherbackend W/System.err﹕ java.net.SocketTimeoutException: failed to connect to /10.0.2.2 (port 8080) after 20000ms
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:169)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:122)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at java.net.Socket.connect(Socket.java:882)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.Platform.connectSocket(Platform.java:139)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.Connection.connect(Connection.java:148)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:208)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at com.serjsmor.anotherbackend.MainActivity$1.run(MainActivity.java:25)
03-03 11:44:30.310 3548-3571/com.serjsmor.anotherbackend W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
client module : TestEndpoint.java
public class TestEndpoint {
final MyApi taskApiService;
// Constructor
public TestEndpoint () {
MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), null)
.setRootUrl("https://10.0.2.2:8080/_ah/api/")
.setGoogleClientRequestInitializer( new GoogleClientRequestInitializer() {
@Override
public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest)
throws IOException {
abstractGoogleClientRequest.setDisableGZipContent(true);
}
}
);
taskApiService = builder.build();
} // end of constructor, other methods to follow in this class...
}
The actual code to run it : MainActivity.java
new Thread( new Runnable() {
@Override
public void run() {
TestEndpoint test = new TestEndpoint();
try {
test.taskApiService.sayHi("sdad").execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
backend module : MyBean.java
public class MyBean {
private String myData;
public String getData() {
return myData;
}
public void setData(String data) {
myData = data;
}
}
MyEndpoint.java
@Api(name = "myApi", version = "v1", namespace = @ApiNamespace(ownerDomain = "backend.anotherbackend.serjsmor.com", ownerName = "backend.anotherbackend.serjsmor.com", packagePath = ""))
public class MyEndpoint {
/**
* A simple endpoint method that takes a name and says Hi back
*/
@ApiMethod(name = "sayHi")
public MyBean sayHi(@Named("name") String name) {
MyBean response = new MyBean();
response.setData("Hi, " + name);
return response;
}
Module:app build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.serjsmor.anotherbackend"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(path: ':backend', configuration: 'android-endpoints')
}
Module:backend build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.google.appengine:gradle-appengine-plugin:1.9.14'
}
}
repositories {
jcenter();
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
dependencies {
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.14'
compile 'com.google.appengine:appengine-endpoints:1.9.14'
compile 'com.google.appengine:appengine-endpoints-deps:1.9.14'
compile 'javax.servlet:servlet-api:2.5'
}
appengine {
downloadSdk = true
appcfg {
oauth2 = true
}
endpoints {
getClientLibsOnBuild = true
getDiscoveryDocsOnBuild = true
}
}
The 10.0.2.2 refers to your Genymotion emulator device which is NOT where your dev app engine server is running. Your dev app engine server should be running on your local desktop computer with a typical ip address like say 192.168.1.100. So do this instead:
.setRootUrl("http://192.168.1.100:8080/_ah/api/")
find out your ip address from windows with 'ipconfig' command in the cmd.exe window. I don't know for other OS. Notice you'll be using 'http' locally, NOT 'https' (which is for accessing the app engine on appspot.com)
All your other code seems RIGHT!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With