-您好,我按照本教程进行操作,并通过从 Android 应用程序调用的 Restlet Web 服务(使用 Objectify)将数据存储在 Google App Engine 中:
http://www.tutos-android.com/webservice-rest-android-appengine-restlet-objectify
本教程使用名为 "User" 的模型类:
- 用户.java
- 用户控制器.java
- 用户控制器接口.java
现在我想使用我自己的名为“Track”的模型类并构建我自己的应用程序。
所以我创建了一个新的 Android 项目,一个新的 Restlet Server 项目,并创建了一个新的 Google 引擎应用程序,只是为了保持整洁。
简而言之,除了我使用“Tracks”而不是“Users”之外,我的编码与本教程相同:
- 轨道.java
- TrackController.java
- TrackControllerInterface.java
当我通过 Android 应用调用 create 方法时,我得到一个: “不支持的媒体类型 (415) - 不支持的媒体类型”
我的界面:
public interface TrackControllerInterface {
@Put
void create(Track track);
@Get
Container getAllTracks();
}
我的 RestletDispatch :
public class RestletDispatch extends Application
{
@Override
public synchronized Restlet createInboundRoot()
{
final Router router = new Router(getContext());
router.attach("/track", TrackController.class);
return router;
}
}
我的 Track 服务器端(我删除了除了名称之外的所有额外属性):
public class Track implements Serializable {
private static final long serialVersionUID = 2028908999105872121L;
@Id
private Long id;
private String name;
public Track() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我的 TrackController 服务器端:
import static com.restlet.pcn.vttracks.server.OfyService.ofy;
public class TrackController extends ServerResource implements
TrackControllerInterface {
public TrackController() {
}
@Override
public void create(Track track) {
Track tk = new Track();
tk.setName(track.getName());
ofy().put(tk);
}
@Override
public Container getAllTracks() {
Container content = null;
List tracks = new ArrayList();
Query<Track> qTracks = ofy().query(Track.class);
for (Track track : qTracks){
tracks.add(track);
}
content = new Container();
content.setTrack_list(tracks);
return content;
}
}
Android App 中的调用:
EditText name = (EditText) findViewById(R.id.track_create_name);
Track track = new Track();
track.setName(name.getText().toString());
final TrackController tc = new TrackController();
try {
tc.create(track);
} catch (Exception e) {
在 Google App Engine 的日志中,我看到:
93.0.180.137 - - [16/Feb/2013:00:46:07 -0800] “PUT /rest/track HTTP/1.1” 415 546 - “Restlet-Framework/2.0rc4” “vttracks-app-test2.appspot。 com" ms=1407 cpu_ms=1027 cpm_usd=0.000061 实例=00c61b117c40b5128fe48b35a014925f9d2f
我尝试在界面中使用 String 而不是 Track 并且它在没有 415 错误的情况下工作,因此 Track 类的定义/使用一定存在问题:
public interface TrackControllerInterface {
@Put
void create(String trackName);
@Get
Container getAllTracks();
}
- 当我从“用户”“重构”到“跟踪”时,我错过了什么?
- 我必须检查什么来纠正这些框架的“415 错误”?
我寻找了关于 415 的其他问题,但找不到任何关于这个案例的指针。
在此先感谢您的帮助。