小编Alp*_*rae的帖子

如何使用继承建模RESTful API?

我有一个对象层次结构,我需要通过RESTful API公开,我不确定我的URL应该如何构建以及它们应该返回什么.我找不到任何最佳做法.

假设我有继承动物的狗和猫.我需要对狗和猫进行CRUD操作; 我也希望能够对动物进行一般操作.

我的第一个想法是做这样的事情:

GET /animals        # get all animals
POST /animals       # create a dog or cat
GET /animals/123    # get animal 123
Run Code Online (Sandbox Code Playgroud)

问题是/ animals集合现在"不一致",因为它可以返回并获取不具有完全相同结构的对象(狗和猫).将集合返回具有不同属性的对象,它被认为是"RESTful"吗?

另一个解决方案是为每个具体类型创建一个URL,如下所示:

GET /dogs       # get all dogs
POST /dogs      # create a dog
GET /dogs/123   # get dog 123

GET /cats       # get all cats
POST /cats      # create a cat
GET /cats/123   # get cat 123
Run Code Online (Sandbox Code Playgroud)

但现在狗和猫之间的关系就失去了.如果想要检索所有动物,必须查询狗和猫的资源.每个新的动物子类型的URL数量也会增加.

另一个建议是通过添加以下内容来扩充第二个解决方案:

GET /animals    # get common attributes of all animals
Run Code Online (Sandbox Code Playgroud)

在这种情况下,返回的动物将仅包含所有动物共有的属性,丢弃特定于狗的属性和特定于猫的属性.这允许检索所有动物,尽管细节较少.每个返回的对象都可以包含指向详细的具体版本的链接.

有什么意见或建议吗?

api rest polymorphism inheritance

79
推荐指数
2
解决办法
2万
查看次数

如何自定义JAXB对象列表到JSON的序列化?

我正在使用Jersey为服务器组件创建REST Web服务.

我想在列表中序列化的JAXB注释对象如下所示:

@XmlRootElement(name = "distribution")
@XmlType(name = "tDistribution", propOrder = {
    "id", "name"
})
public class XMLDistribution {
    private String id;
    private String name;
    // no-args constructor, getters, setters, etc
}
Run Code Online (Sandbox Code Playgroud)

我有一个REST资源来检索一个看起来像这样的发行版:

@Path("/distribution/{id: [1-9][0-9]*}")
public class RESTDistribution {
    @GET
    @Produces("application/json")
    public XMLDistribution retrieve(@PathParam("id") String id) {
        return retrieveDistribution(Long.parseLong(id));
    }
    // business logic (retrieveDistribution(long))
}
Run Code Online (Sandbox Code Playgroud)

我还有一个REST资源来检索所有发行版的列表,如下所示:

@Path("/distributions")
public class RESTDistributions {
    @GET
    @Produces("application/json")
    public List<XMLDistribution> retrieveAll() {
        return retrieveDistributions();
    }
    // business logic (retrieveDistributions())
}
Run Code Online (Sandbox Code Playgroud)

我使用ContextResolver来自定义JAXB序列化,当前配置如下:

@Provider
@Produces("application/json")
public class …
Run Code Online (Sandbox Code Playgroud)

serialization json jax-rs jaxb jersey

54
推荐指数
2
解决办法
5万
查看次数

在Android中使用Serializable是不是很糟糕?

我一直在阅读很多文章和文章,颂扬Parcelable在Serializable上的速度.我一直在使用两种方法来通过Intents在Activities之间传递数据,并且在两者之间切换时还没有注意到任何速度差异.我必须传输的典型数据量是5到15个嵌套对象,每个对象有2到5个字段.

由于我有大约30个必须可转移的类,因此实现Parcelable需要大量的样板代码来增加维护时间.我目前的要求之一是编译的代码应该尽可能小; 我希望通过使用Serializable over Parcelable可以节省一些空间.

我应该使用Parcelable还是没有理由在Serializable上使用它来处理这么少量的数据?还是有另一个原因我不应该使用Serializable?

android serializable parcelable

53
推荐指数
3
解决办法
1万
查看次数

如何更改Android警报对话框的背景?

我在我的应用程序中使用AlertDialog类.默认情况下,这些警报对话框具有透明背景.我试图使用不透明的背景,非常不成功.这些是我的风格:

<style name="MyOpaqueActivity" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/my_background</item>
    <item name="android:alertDialogStyle">@style/MyOpaqueAlertDialog</item>
</style>

<style name="MyOpaqueAlertDialog" parent="@android:style/Theme.Dialog.Alert">
    <item name="android:background">#454545</item>
    <item name="android:windowBackground">@drawable/my_background</item>
    <item name="android:popupBackground">@drawable/my_background</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我成功地为整个活动应用了"MyOpaqueActivity"样式(窗口背景更改为"my_background"),但它不适用于这些活动中的警报对话框."alertDialogStyle"属性和我的"MyOpaqueAlertDialog"样式似乎没有任何效果.

那么如何更改这些警报对话框的背景呢?

android background dialog

19
推荐指数
1
解决办法
4万
查看次数

更改Android系统时钟会停止计时器.我该如何重新启动它们?

我需要在Android应用程序中运行定期任务.我目前使用这样的计时器:

final Handler guiHandler = new Handler();

// the task to run
final Runnable myRunnable = new Runnable() {

    @Override
    public void run() {
        doMyStuff();
    }
};

Timer timer = new Timer();
timer.schedule(new TimerTask() {

    @Override
    public void run() {
        guiHandler.post(myRunnable);
    }
}, 0, 30000); // run every 30 seconds
Run Code Online (Sandbox Code Playgroud)

这正是我所需要的,但是有一个问题:如果我在模拟器或手机上更改时间,计时器将停止运行.这是我更改时间时日志中显示的内容:

D/SystemClock(  331): Setting time of day to sec=1278920137
W/SystemClock(  331): Unable to set rtc to 1278920137: Invalid argument
Run Code Online (Sandbox Code Playgroud)

没有关于计时器被中断的事情,但是在系统时钟改变之后它显然不再运行.只要应用程序正在运行,我就需要让任务始终保持运行.

如果它像这样停止,我怎么能重启计时器?Timer或TimerTask上没有方法来检查它是否正在运行,所以我不知道何时重新安排它.有任何想法吗?

android timer systemtime

8
推荐指数
1
解决办法
2588
查看次数

如何在NetBeans中的Android项目中使用外部jar?

我需要创建一个Android库,我可以将其作为jar包含在任何Android应用程序中.我使用NetBeans 6.8,nbandroid插件和Android SDK.

我到目前为止采取的步骤是:

1)创建库项目,包含android.jar以访问Android类(该库使用android.util.Log和其他Android类).

2)将库编译为jar.

3)将库的jar添加到Android应用程序(右键单击项目节点下的Libraries并添加jar).

4)将<uses-library>添加到Android清单. (错误和不必要)

第3步至少允许我在应用程序的源代码中引用库的类,但是在编译时似乎并没有实际包含这些类.当我运行该应用程序时,我在日志中收到以下错误.

I/dalvikvm(  349): Could not find method mylibrarypackage.MyClass.myMethod, referenced from method myapplicationpackage.HomeActivity.onCreate
W/dalvikvm(  349): VFY: unable to resolve static method 985: Lmylibrarypackage/MyClass;.myMethod ()V
D/dalvikvm(  349): VFY: replacing opcode 0x71 at 0x000a
D/dalvikvm(  349): Making a copy of Lmyapplicationpackage/HomeActivity;.onCreate code (160 bytes)
D/AndroidRuntime(  349): Shutting down VM
W/dalvikvm(  349): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime(  349): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  349): java.lang.NoClassDefFoundError: mylibrarypackage.MyClass
E/AndroidRuntime( …
Run Code Online (Sandbox Code Playgroud)

android netbeans jar

6
推荐指数
1
解决办法
1万
查看次数

Android底部按钮栏和滚动视图,带有对话框主题

我正在尝试使用以下内容显示Android活动:

  • 对话主题;
  • 标题固定在对话框的顶部;
  • 一个固定在对话框底部的按钮栏;
  • 中间的滚动视图.

我编写的布局符合这些标准,但对话框始终填满整个屏幕(请参见底部的垂直屏幕截图).

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">

    <TextView android:id="@+id/header"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginLeft="10dp" android:layout_marginRight="10dp"
    android:layout_marginTop="10dp" android:layout_marginBottom="10dp"
    android:gravity="center_vertical"
        android:textSize="18dip" android:textColor="#ffffff"
        android:text="Sample Layout" />

    <LinearLayout android:id="@+id/controls" android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    style="@android:style/ButtonBar">
        <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_weight="1" android:text="Yes" />
        <Button android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:layout_weight="1" android:text="No" />
    </LinearLayout>

    <ScrollView android:id="@+id/test" android:layout_below="@id/header"
    android:layout_above="@id/controls"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:layout_marginBottom="5dp" android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp">
        <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="Lorem ipsum dolor sit amet, consectetur
        adipiscing elit. Integer dui odio, convallis vitae suscipit eu,
        tincidunt non mi. Vestibulum faucibus …
Run Code Online (Sandbox Code Playgroud)

android dialog scrollview buttonbar

5
推荐指数
1
解决办法
8788
查看次数

在TableLayout中使用EditView的Android文本剪辑问题

我有一个小剪辑的问题,我一直无法使用通过tablerow一个EditText视图来解决.无论我尝试,所述的EditText视图要么剪切(附截图),或者,如果设置了shrinkColumns为0或1,标签文本消失(和的EditText视图占据整个宽度).布局如下:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:padding="10dip">

  <TableLayout android:orientation="vertical"
  android:layout_width="fill_parent" android:layout_height="fill_parent">

    <TableRow android:orientation="horizontal"
    android:layout_width="fill_parent" android:layout_height="wrap_content">

      <TextView android:paddingRight="10dip" android:layout_column="1"
      android:text="Label Text" />
      <EditText android:text="Very long text that makes the text view go on clipping frenzy"
      android:layout_width="wrap_content" android:layout_height="wrap_content" />

    </TableRow>

  </TableLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我试过它在QVGA和HVGA,一个的HTC Hero上2.1和野火2.1上运行,以及一个2.2模拟器.我也玩过clipToPadding属性,这在我的情况下似乎没什么帮助.如果我使用长文本设置提示属性并将文本值保留为空,则会出现相同的问题.

由于我没有做任何特别复杂的事情,我怀疑我身边有一个简单的错误.任何想法,提示或建议都非常感谢.

干杯!

替代文字

android text clipping tablelayout

4
推荐指数
1
解决办法
1385
查看次数