Java 物理设备测试和google app engine后端
我下面尝试做一个android应用程序,在谷歌应用程序引擎上有一个后端。 我现在想在本地测试我的应用程序和GAE Api之间的连接,所以我尝试在我的Nexus 5手机上执行以下代码(不是模拟的) MainActivity.javaJava 物理设备测试和google app engine后端,java,android,google-app-engine,Java,Android,Google App Engine,我下面尝试做一个android应用程序,在谷歌应用程序引擎上有一个后端。 我现在想在本地测试我的应用程序和GAE Api之间的连接,所以我尝试在我的Nexus 5手机上执行以下代码(不是模拟的) MainActivity.java public class MainActivity extends FragmentActivity { private final String DEBUG_TAG = "MainActivity"; @Override protect
public class MainActivity extends FragmentActivity {
private final String DEBUG_TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* AsyncTask for calling Mobile Assistant API for checking into a place (e.g., a store)
*/
private class CheckInTask extends AsyncTask<Void, Void, Void> {
/**
* Calls appropriate CloudEndpoint to indicate that user checked into a place.
*
* @param params the place where the user is checking in.
*/
@Override
protected Void doInBackground(Void... params) {
CheckIn checkin = new CheckIn();
// Set the ID of the store where the user is.
// This would be replaced by the actual ID in the final version of the code.
checkin.setPlaceId("StoreNo123");
Checkinendpoint.Builder builder = new Checkinendpoint.Builder(
AndroidHttp.newCompatibleTransport(), new JacksonFactory(),
null);
builder = CloudEndpointUtils.updateBuilder(builder);
Checkinendpoint endpoint = builder.build();
try {
endpoint.insertCheckIn(checkin).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
}
public类MainActivity扩展了FragmentActivity{
私有最终字符串DEBUG_TAG=“MainActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
*AsyncTask,用于调用Mobile Assistant API以检查某个位置(例如商店)
*/
私有类CheckInTask扩展异步任务{
/**
*调用适当的CloudEndpoint以指示用户已签入某个位置。
*
*@param params用户正在签入的位置。
*/
@凌驾
受保护的Void doInBackground(Void…参数){
签入签入=新签入();
//设置用户所在商店的ID。
//在代码的最终版本中,这将被实际ID替换。
checkin.setPlaceId(“StoreNo123”);
Checkinendpoint.Builder=新建Checkinendpoint.Builder(
AndroidHttp.newCompatibleTransport(),新JacksonFactory(),
无效);
builder=CloudEndpointUtils.updateBuilder(builder);
Checkinendpoint endpoint=builder.build();
试一试{
insertCheckIn(checkin.execute();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}
}
}
我得到了这个
我应该在哪里得到这个
(来源:) 日志显示: java.net.SocketTimeoutException:在20000ms后连接到/10.0.2.2(端口8888)失败 “实体种类”列表中没有可用的签入
- 我已在本地启动appengine,我得到:
INFOS:Dev App Server正在运行
- 我已将CloudEndPointUtils.java设置为:
LOCAL\u ANDROID\u RUN=true;
和LOCAL\u APP\u ENGINE\u SERVER\u URL=”http://localhost:8888/“;
本地应用程序、引擎、服务器、用于ANDROID的URL=”http://10.0.2.2:8888“;
编辑:我已尝试部署应用程序,但我遇到了相同的问题,出现了相同的日志错误。这是因为10.0.2.2是使用仿真器时本地主机的地址。如果您想在您的设备上尝试,并且您的所有计算机和设备都连接到本地网络,请尝试将服务器地址更改为http://本地网络ip:端口/\u ah/api。启动appengine应用程序时,将主机地址设置为0.0.0.0,以使网络上的其他计算机可以访问它。我建议首先使用Google api explorer测试api。使用。如果能够访问它,则可能会与服务器url.builder发生冲突。setRootUrl(“);您是否启用了开发服务器来侦听来自本地网络的请求?我已输入:
protectedstatic final boolean local\u ANDROID\u RUN=true;
protected static final String local\u APP\u ENGINE\u server\u URL=”http://0.0.0.0:8888/“;
本地应用程序、引擎、服务器、用于ANDROID的URL=”http://192.***.0.3:8888";
但我也有同样的问题。我做错什么了吗?启动appengine时,你必须明确地将其设置为0.0.0.0,听起来你在使用Eclipse,这个问题基本上回答了如何做:好的,我感觉我就快到了,现在我可以通过http://192.***.0.3:8888/_-ah/admin/
但我仍然有sam结果是另一个日志错误:java.net.ConnectException:20000ms后未能连接到localhost/127.0.0.1(端口8888):断开连接失败:ECONREFUSE(连接被拒绝)
我是否应该输入:String LOCAL\u APP\u ENGINE\u SERVER\u URL=”http://192.168.0.3:8888“;
String LOCAL\u APP\u ENGINE\u SERVER\u URL\u FOR\u ANDROID="http://192.168.0.3:8888“;
在我的android应用程序的CloudEndpointUtils.java中?是的,你可以试试,看起来连接仍在尝试访问本地主机(而不是显式地访问192.168.0.3)无论您上次尝试了什么配置,我要检查的是,在您的手机上进行测试时,必须将哪个变量设置为192.168.0.3地址,然后将其传递给endpoints builder。