使用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的任何提示吗?
谢谢
我首先尝试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) 我试图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) 从设计库中读取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)
??
非常感谢你
我想实现一个屏幕,其中我有一个包含RecyclerView的卡片视图.
CardView应该与回收者视图的内容高度相同,这意味着如果RecyclerView的项目很少,我应该看到卡片的底角和底部阴影但是如果RecyclerView有很多项目,那么Card视图应该是使用RecyclerView"滚动"以获得RecylerView底部的cardview底角和阴影.
当用户开始滚动时,顶角会随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可以帮助我,但我找不到任何东西......
谢谢
我现在正在创建一个简单的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) 你好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) 我正在尝试将我的Gradle构建的行为自定义为Android-Wear友好.
我在我的处理apk中手动捆绑我的磨损apk(因为我没有设法自动完成).
这意味着,如果我想构建一个新版本的处理apk,我必须手动构建我的服装apk,复制/过去生成的穿 - apk insinde我的res/raw处理项目然后构建新处理的apk.
我希望所有这些都能实现自动化.
所以,我需要做的是:
wear/output/apk/wear-apk.apk并将其复制app/src/main/res/raw我没有找到如何从另一个任务启动任务(wear:assembleRelease).
欢迎任何帮助!
我有一个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我的工具栏,但它也打破了导航图标:
我的配置打破导航图标有什么问题?
为了记录,我试图删除 …
我有一个试图遵循清洁架构的应用程序,我需要做一些缓存失效,但我不知道应该在哪一层做这个.
为了这个例子,假设我有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存储库被模拟Real时Interactor使用的实现以及使用Internet存储库时的实现.这CacheInvalidator将注入到,Interactor并且选定的实现将由Factory构建存储库和存储库提供CacheInvalidator.这意味着我将拥有MockedOrderHistoryRepositoryFactory- 正在构建MockedOrderHistoryRepository和DummyCacheInvalidator- 以及InternetOrderHistoryRepositoryFactory- …
我目前正在使用带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 上,我试图用特定的数字格式格式化一些货币。
我的号码必须使用法语格式 ( 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),它只是来自网络服务的字符串。
有没有办法告诉格式化程序我想要法语数字格式,但它需要尊重符号的货币位置?
我想知道如何在活动之间共享子组件?
假设我有一个与Application一起使用的全局AppComponent.
当用户实际登录我的应用程序时,我希望有一个UserComponent,它存在于多个活动中.
当用户登录时,我的应用程序会创建一个UserComponent,其他活动必须从某个地方检索,但我不知道什么是最好的"某处".
我应该将UserComponent存储在Application中并创建一个getter和一个重置组件的方法吗?我应该将此组件放在ApplicationModule内的"holder"对象中以及每个子活动中,通过从ApplicationComponent获取"holder"来检索我的组件吗?我应该将它存储在静态字段中吗?我应该做别的吗?