小编pde*_*d59的帖子

改造2 - 动态URL

使用Retrofit 2,您可以在服务方法的注释中设置完整的URL,如:

public interface APIService {
  @GET("http://api.mysite.com/user/list")
  Call<Users> getUsers();
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的应用程序中,我的webservices的URL在编译时是未知的,应用程序在下载的文件中检索它们,所以我想知道如何使用Retrofit 2和完整的动态URL.

我试图设置一个完整的路径,如:

public interface APIService {
  @GET("{fullUrl}")
  Call<Users> getUsers(@Path("fullUrl") fullUrl);
}

new Retrofit.Builder()
  .baseUrl("http://api.mysite.com/")
  .build()
  .create(APIService.class)
  .getUsers("http://api.mysite.com/user/list"); // this url should be dynamic
  .execute();
Run Code Online (Sandbox Code Playgroud)

但在这里,Retrofit并未发现该路径实际上是一个完整的URL并且正在尝试下载 http://api.mysite.com/http%3A%2F%2Fapi.mysite.com%2Fuser%2Flist

有关如何使用这种动态网址进行Retrofit的任何提示吗?

谢谢

android retrofit

153
推荐指数
8
解决办法
9万
查看次数

AngularJS - 在指令的链接函数中访问隔离范围

我首先尝试AngularJS自定义指令.

我在使用(或理解......)指令的link函数中的隔离范围时遇到了麻烦.

以下是我的应用程序的这部分代码:

view.html

...
<raw-data id="request-data" title="XML of the request" data="request">See the request</raw-data>
...
Run Code Online (Sandbox Code Playgroud)

request 是在viewCtrl范围内发布的变量,它包含请求的xml-string.

rawData.js

directives.directive('rawData', function() {

    return {
        restrict : 'E',
        templateUrl : 'partials/directives/raw-data.html',
        replace : true,
        transclude : true,
        scope : {
            id : '@',
            title : '@',
            data : '='
        },
        link : function($scope, $elem, $attr) {
            console.log($scope.data); //the data is correclty printed
            console.log($scope.id); //undefined
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

原始data.html

<div>
    <!-- Button to trigger modal -->
    <a href="#{{id}}Modal" role="button" class="btn" data-toggle="modal" ng-transclude></a>

    <!-- …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-directive

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

AngularJS - 使用$ routeProvider:resolve拒绝$ http承诺

我试图resolve在a $routeProvider中仅在$http请求完成时显示新路由.如果请求成功,则解析$ http.post()产生的承诺并呈现视图.但是如果请求失败(例如,超时或内部错误),则永远不会解析承诺,并且永远不会呈现视图.我如何使用resolve?处理请求失败?

下面代码中最重要的部分是:

app.js

$routeProvider.when('/warrantyResult', {
    templateUrl : 'partials/warranty-result.html',
    controller : 'WarrantyResultCtrl',
    resolve : {
        response : [ 'Warranty', function(Warranty) {
            return Warranty.sendRequest();
        } ]
    }
});
Run Code Online (Sandbox Code Playgroud)

controllers.js

angular.module('adocDemo.controllers', []).controller('HomeCtrl', [ '$scope', function($scope) {

} ]).controller('WarrantyCtrl', [ '$scope', '$http', '$location', 'Warranty', function($scope, $http, $location, Warranty) {
    $scope.submitWarranty = function() {
        $scope.loading = true;
        Warranty.setRequestData($scope.data);
        $location.path('/warrantyResult');
    };
} ]).controller('WarrantyResultCtrl', [ '$scope', 'Warranty', function($scope, Warranty) {

    $scope.request = Warranty.getRequestData();
    $scope.response = Warranty.getResponseData();
} ]); …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

什么是布局中的<view /> XML标记

从设计库中读取SnackBar的源代码时,我发现了这种XML布局:

<view xmlns:android="http://schemas.android.com/apk/res/android"
      class="android.support.design.widget.Snackbar$SnackbarLayout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="bottom"
      style="@style/Widget.Design.Snackbar" />
Run Code Online (Sandbox Code Playgroud)

我从来没有看到过只有一个<view/>标签的这种XML (V值较低,所以不是View类).

我的第一个猜测是它像<fragment/>标签一样工作,表明它应该根据class属性创建一个自定义视图,但为什么在他可以写的时候使用这种表示法:

<android.support.design.widget.Snackbar.SnackbarLayout 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="bottom"
      style="@style/Widget.Design.Snackbar" />
Run Code Online (Sandbox Code Playgroud)

??

非常感谢你

xml android android-layout

10
推荐指数
1
解决办法
1596
查看次数

里面有RecyclerView的可滚动CardView

我想实现一个屏幕,其中我有一个包含RecyclerView的卡片视图.

CardView应该与回收者视图的内容高度相同,这意味着如果RecyclerView的项目很少,我应该看到卡片的底角和底部阴影但是如果RecyclerView有很多项目,那么Card视图应该是使用RecyclerView"滚动"以获得RecylerView底部的cardview底角和阴影.

这里当RecyclerView位于顶部时应该是什么样子: 列在顶部

当用户开始滚动时,顶角会随RecyclerView滚动而消失: 滚动期间列出

最后,当用户到达RecyclerView的底部时,会出现底角和CardView的阴影: 最后列出

从现在开始,我设法通过将RecyclerView放在CardView和CardView里面的NestedScrollView中来实现一个有效的实现,但是这打破了这个动作......

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:clipChildren="false"
    android:id="@+id/containerLayout"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    tools:ignore="MissingPrefix">

    <android.support.v4.widget.NestedScrollView
        android:clipToPadding="false"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:paddingBottom="16dp"
        android:paddingLeft="85dp"
        android:paddingRight="85dp"
        android:paddingTop="16dp">

        <android.support.v7.widget.CardView
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            app:cardBackgroundColor="?android:attr/windowBackground">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recyclerView"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"/>
        </android.support.v7.widget.CardView>
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

您对如何实施此类设计有任何暗示或想法吗?我想CoordinatorLayout可以帮助我,但我找不到任何东西......

谢谢

android scrollview android-recyclerview cardview

10
推荐指数
2
解决办法
2241
查看次数

HttpServletResponse#sendError如何更改ContentType

我现在正在创建一个简单的Servlet来回答表单子目录.此servlet接收POST请求,并应响应Application/JSON数据.这很好用.我现在想要向我的servlet添加错误管理:如果servlet收到错误的请求参数,我希望它通过简单的{"error":"ERROR MESSAGE"}JSON响应回答客户端400 - "错误请求" 响应.

我正在使用HttpServletResponse#sendError(int,String)正确发送错误,但ContentType响应的始终设置为text/html,即使我HttpServletResponse#setContentType("application/json")之前使用过.

这是使用Servets发送错误的好方法吗?我如何强制ContentType响应application/json

编辑:我的测试Servlet的doPost()方法的示例代码:

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("application/json;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("{\"error\":1}");
        response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)

java servlets java-ee

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

LayoutTransition - 扩展容器不会推送其他容器

你好Android开发者!

Nota:帖子末尾的所有代码.

我希望只要其中一个子视图通过平滑展开动画变为可见,就可以为其设置动画.借助于LayoutTransition此扩展/折叠动画,没有任何问题.

但问题是动画ViewGroup是"复杂"的一部分LinearLayout.

ViewGroup's高度设置为wrap_content另一个ViewGroup,在动画ViewGroup下方具有0dp高度,权重设置为1以适合屏幕上的所有剩余空间.

每当动画ViewGroup扩展时,由于垂直占用更多空间,底部ViewGroup应缩小以使顶部ViewGroup具有扩展所需的空间.我希望这个底部ViewGroup也能用动画缩小.

不起作用的是,ViewGroup当第一个动画ViewGroup开始时,底部会立即调整大小.我尝试将LayoutTransition对象添加到底部ViewGroup或全局根ViewGroup,但似乎没有什么可以解决问题.

有没有人设法做过这样的动画?我希望这与4.0兼容.(没有LayoutTransition.CHANGING然后...:s)

谢谢您的帮助 !

现在代码:

my_activity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="@dimen/actionbar_height"
    android:background="@drawable/bg_texture_black"
    android:orientation="vertical">

    <!-- This is the layout with the LayoutTransition instance -->
    <LinearLayout
        android:id="@+id/layout_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/dimen_margin_xlarge"
        android:paddingRight="@dimen/dimen_margin_xlarge"
        android:paddingTop="@dimen/dimen_margin_medium"
        android:paddingBottom="@dimen/dimen_margin_medium"
        android:background="@drawable/bg_black_gradient_to_top"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
            android:textSize="@dimen/font_size_xxlarge"
            android:text="@string/text_my_documents"/>

        <!-- This is the layout with the …
Run Code Online (Sandbox Code Playgroud)

android

5
推荐指数
0
解决办法
557
查看次数

Gradle Android - 覆盖标准任务

我正在尝试将我的Gradle构建的行为自定义为Android-Wear友好.

我在我的处理apk中手动捆绑我的磨损apk(因为我没有设法自动完成).

这意味着,如果我想构建一个新版本的处理apk,我必须手动构建我的服装apk,复制/过去生成的穿 - apk insinde我的res/raw处理项目然后构建新处理的apk.

我希望所有这些都能实现自动化.

所以,我需要做的是:

  1. 从cmd行启动应用程序:assembleRelease
  2. Gradle先做一次穿:assembleRelease
  3. 最后,Gradle从中获取apk wear/output/apk/wear-apk.apk并将其复制app/src/main/res/raw
  4. 然后Gradle可以继续做app:assembleRelease

我没有找到如何从另一个任务启动任务(wear:assembleRelease).

欢迎任何帮助!

android gradle

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

工具栏默认样式和导航图标

我有一个Toolbar内心AppBarLayout.以下是两个视图的XML:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbarlayout"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:theme="@style/App.ThemeOverlay.Toolbar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"/>

</android.support.design.widget.AppBarLayout>
Run Code Online (Sandbox Code Playgroud)

主题为:

<style name="App.ThemeOverlay.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
Run Code Online (Sandbox Code Playgroud)

主题适用于Activity:

<style name="App.Theme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@android:color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)

现在,我想titleTextAppearance为工具栏应用自定义.

我知道我可以app:titleTextAppearance在我的布局的XML中使用,但我想从主题配置它,以便我的应用程序的每个工具栏都具有相同的样式,而无需在每个布局中设置文本外观.

经过一些AppCompat源代码的挖掘,我发现Toolbar使用toolbarStyle当前主题作为其默认主题.

此样式的默认值为Widget.AppCompat.ActionBar.

所以我的第一个猜测是在我的主题叠加层中覆盖此样式,并更改titleTextAppearance此新样式:

<style name="App.ThemeOverlay.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="toolbarStyle">@style/App.Style.Toolbar</item>    
</style>

<style name="App.Style.Toolbar" parent="Widget.AppCompat.ActionBar">
    <item name="titleTextAppearance">@style/App.TextAppearance.Toolbar.Title</item>
</style>

<style name="App.TextAppearance.Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
    <item name="android:textColor">#00FF00</item> (this is some green)
    <item name="android:textAllCaps">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这实际上覆盖了titleTextAppearance我的工具栏,但它也打破了导航图标:

工具栏样式失败

我的配置打破导航图标有什么问题?

为了记录,我试图删除 …

android toolbar android-appcompat

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

清洁体系结构和缓存失效

我有一个试图遵循清洁架构的应用程序,我需要做一些缓存失效,但我不知道应该在哪一层做这个.

为了这个例子,假设我有OrderInteractor2个用例:getOrderHistory()sendOrder(Order).

第一个用例是使用a OrderHistoryRepository,第二个用例是使用a OrderSenderRepository.这些存储库是具有多个实现(MockOrderHistoryRepository以及InternetOrderHistoryRepository第一个)的接口.该OrderInteractor只与经过界面论文库为了隐藏真正实现交互.

Mock版本非常虚拟,但Internet历史存储库的版本将一些数据保留在缓存中以更好地执行.

现在,我想实现以下内容:当成功发送订单时,我想使历史记录的缓存无效,但我不知道应该在哪里执行实际的缓存失效.

我的第一个猜测是一个补充invalidateCache()OrderHistoryRepository,并在结束使用此方法sendOrder()交互器内的方法.在InternetOrderHistoryRepository,我将只需要实现缓存失效,我会很好.但我将被迫在其中实际实现该方法,MockOrderHistoryRepository并且向外部暴露了存储库执行某些缓存管理的事实.我认为OrderInteractor不应该知道这个缓存管理,因为它是Internet版本的实现细节OrderHistoryRepository.

我的第二个猜测是InternetOrderSenderRepository当它知道订单已成功发送时执行缓存失效,但它会强制此存储库知道InternetOrderHistoryRepository,以便获取此repo用于缓存管理的缓存密钥.而且我不希望我OrderSenderRepository依赖于OrderHistoryRepository.

最后,我的第三个猜测是使用某种CacheInvalidator(无论名称)接口与Dummy存储库被模拟RealInteractor使用的实现以及使用Internet存储库时的实现.这CacheInvalidator将注入到,Interactor并且选定的实现将由Factory构建存储库和存储库提供CacheInvalidator.这意味着我将拥有MockedOrderHistoryRepositoryFactory- 正在构建MockedOrderHistoryRepositoryDummyCacheInvalidator- 以及InternetOrderHistoryRepositoryFactory- …

java android clean-architecture

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

Android - 带有数字参数的EditText的Bug

我目前正在使用带android:digits参数的EditText遇到一个奇怪的错误.这是EditText的XML:

<EditText
  android:id="@+id/edittext"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:gravity="center_vertical"
  android:hint="@string/some_text"
  android:imeOptions="actionDone"
  android:singleLine="true"
  android:digits="abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ\\ "
  android:maxLength="140"
  android:textSize="@dimen/font_size_small"/>
Run Code Online (Sandbox Code Playgroud)

如您所见,此EditText允许用户仅键入字母数字字符.

现在,如果我尝试使用这个EditText,EditText正确地过滤我正在键入的字符但是...如果我键入一些字符然后直接跟着%,之前键入的字符将被复制到EditText中!

例如:我在键盘上打字hello%%,EditText中的结果将是hellohellohello.

你们有没有经历过这样的错误?它来自Android平台吗?我应该报告还是已经报告过?

有关信息,我的设备是带有Android 4.3的Nexus 4.

谢谢 !

android android-edittext

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

不同于 Locale 的货币的货币格式

在 Android 上,我试图用特定的数字格式格式化一些货币。

我的号码必须使用法语格式 ( 9 876 543,21)进行格式化,但应根据货币放置货币符号:

  • 9 876 543,21 € 欧元
  • $9 876 543,21 美元

这是我现在的代码(这使用了java.util类,但结果与android.icu包相同):

final Double of = Double.valueOf("9876543.21");
final Currency usd = Currency.getInstance("USD");
final NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.FRANCE);
currencyInstance.setCurrency(usd);
Log.d("test", currencyInstance.format(amount));
Run Code Online (Sandbox Code Playgroud)

输出是9 876 543,21 $US因为我的 NumberFormat 使用的是法语语言环境。

注意:Locale 必须是 FRANCE(或 FRENCH)才能获得良好的数字格式,而且我实际上不知道货币代码(例如 EUR、USD 或 GBP),它只是来自网络服务的字符串。

有没有办法告诉格式化程序我想要法语数字格式,但它需要尊重符号的货币位置?

java android

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

如何在活动之间共享Dagger2子组件

我想知道如何在活动之间共享子组件?

假设我有一个与Application一起使用的全局AppComponent.

当用户实际登录我的应用程序时,我希望有一个UserComponent,它存在于多个活动中.

当用户登录时,我的应用程序会创建一个UserComponent,其他活动必须从某个地方检索,但我不知道什么是最好的"某处".

我应该将UserComponent存储在Application中并创建一个getter和一个重置组件的方法吗?我应该将此组件放在ApplicationModule内的"holder"对象中以​​及每个子活动中,通过从ApplicationComponent获取"holder"来检索我的组件吗?我应该将它存储在静态字段中吗?我应该做别的吗?

android dependency-injection dagger

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