我java.io.EOFException在Android上使用Spring REST模板时收到了.
stacktrace原因如下:
Caused by: java.io.EOFException
at libcore.io.Streams.readAsciiLine(Streams.java:203)
at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560)
at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486)
at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:49)
at org.springframework.http.client.SimpleClientHttpResponse.getStatusCode(SimpleClientHttpResponse.java:55)
at org.springframework.http.client.BufferingClientHttpResponseWrapper.getStatusCode(BufferingClientHttpResponseWrapper.java:47)
at com.company.util.LoggingClientHttpRequestInterceptor.intercept(LoggingClientHttpRequestInterceptor.java:33)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.execute(InterceptingClientHttpRequest.java:81)
at com.company.api.interceptor.AuthTokenInterceptor.intercept(AuthTokenInterceptor.java:51)
at org.springframework.http.client.InterceptingClientHttpRequest$RequestExecution.execute(InterceptingClientHttpRequest.java:81)
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:67)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:46)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:63)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:475)
... 14 more
Run Code Online (Sandbox Code Playgroud)
另一个类似的堆栈跟踪:
org.springframework.web.client.ResourceAccessException: I/O error: null; nested exception is java.io.EOFException
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:490)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:438)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:414)
at com.company.api.ApiClient_.logLoginAttempt(ApiClient_.java:299)
at com.company.security.CompanyAuthenticationService$2.onCreateCall(CompanyAuthenticationService.java:206)
at com.company.api.SafeApiCall.doInBackground(SafeApiCall.java:49)
at com.company.api.SafeApiCall.doInBackground(SafeApiCall.java:22)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856) …Run Code Online (Sandbox Code Playgroud) 鉴于我正在使用这样的布局:
<android.support.design.widget.CoordinatorLayout
android:id="@+id/main_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="@dimen/flexible_space_image_height"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:statusBarScrim="@android:color/transparent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/mainView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
<android.support.design.widget.FloatingActionButton
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginBottom="20dp"
app:fabSize="normal"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|center_horizontal"
/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
这几乎是标准的Cheesesquare样本 - 除了FloatingActionButton,我想提升大约20dp.
但是,这不起作用.无论我使用边距,填充等 - 按钮将始终以锚点的边缘为中心,如下所示:

如何将FAB按预期向上移动20dp?
鉴于我的API消费者需要发送客户HTTP标头,如下所示:
# curl -H 'X-SomeHeader: 123' http://127.0.0.1:3000/api/api_call.json
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样在before_filter方法中读取这个标题:
# app/controllers/api_controller.rb
class ApiController < ApplicationController
before_filter :log_request
private
def log_request
logger.debug "Header: #{request.env['HTTP_X_SOMEHEADER']}"
...
end
end
Run Code Online (Sandbox Code Playgroud)
到目前为止很棒.现在我想使用RSpec测试这个,因为行为有变化:
# spec/controllers/api_controller_spec.rb
describe ApiController do
it "should process the header" do
@request.env['HTTP_X_SOMEHEADER'] = '123'
get :api_call
...
end
end
Run Code Online (Sandbox Code Playgroud)
但是,request在ApiController中收到的将无法找到标头变量.
same code使用HTTP_ACCEPT_LANGUAGE标头尝试时,它将起作用.自定义标头是否在某处过滤?
PS:网络上的一些例子使用request而不是@request.虽然我不确定当前Rails 3.2/RSpec 2.14组合中哪一个是正确的 - 但这两种方法都不会触发正确的行为,但两者都可以兼顾HTTP_ACCEPT_LANGUAGE.
这是XML中的TextView示例,它将样式正确应用于TextContactContactNameTextView.
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/photo"
android:layout_alignTop="@id/photo"
android:paddingLeft="10dp"
android:text="First Last"
style="@style/TextContactContactName"
/>
Run Code Online (Sandbox Code Playgroud)
现在,我还要在此元素上设置其他一些内容,这些内容与文本无关.因此我尝试移动TextContactContactName并通过"android:textAppearance"应用它
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/photo"
android:layout_alignTop="@id/photo"
android:paddingLeft="10dp"
android:text="First Last"
android:textAppearance=@style/TextContactContactName"
/>
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有应用文本格式.
样式(存储在res/values/styles-text.xml)中的样式如下:
<style name="TextContactContactName">
<item name="android:textSize">24sp</item>
<item name="android:textColor">#333333</item>
<item name="android:shadowColor">#ffffff</item>
<item name="android:shadowDx">0</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我使用textAppearance标签错了吗?
我测试了Android 2.2 - HTC Desire.
这个问题涉及到
我在这里问,因为我相信SO社区可能有办法解决这个问题.
所以我喜欢将ScrollArea的背景颜色设置为透明或自定义背景图像,因为它将包含一些横幅.我已经在Qt Creator(Designer)中运行了它!:-):

但是当将应用程序部署到模拟器时它将无法工作,它们会保持灰色,深灰色:

这是我的布局树:

这是我正在使用的样式表(附加并设置为MainWindow):
QMainWindow {
background: transparent url(:/ui/designs/images_from_android/bg_plain_empty.png) top left;
}
QWidget#centralWidget {
background-color: transparent;
}
QPushButton {
color: red;
border: 1px solid green;
}
QFrame#top_header {
background: transparent url(:/ui/designs/images_from_android/bg_title_bar_landscape.png) top left repeat-x;
}
QWidget#top_banner_scroll1,
QWidget#top_banner_scroll2 {
background: transparent url(:/ui/designs/images_from_android/stripe_bg.png) top left repeat-x;
}
Run Code Online (Sandbox Code Playgroud)
这非常令人费解.正如Qt Designer向我展示了合适的设计......
鉴于我有一个背景可绘制为TextViews创建这样的项目:

然后我的XML代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="235dp">
<shape android:shape="oval">
<padding android:left="10dp" />
<size android:height="5dp" android:width="5dp"/>
<solid android:color="@color/my_pink"/>
</shape>
</item>
<item android:left="10dp">
<shape android:shape="rectangle">
<solid android:color="#ffffff"/>
<padding android:left="10dp" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
但是一旦我使用上面显示的代码,我的子弹点看起来像这样:

似乎<size>标签被完全忽略了.
你会如何解决这个问题?使用9patch,是的,我知道..也许这是最容易做到的......但实际上我希望找到一个XML解决方案,因为它在未来更灵活.
自定义绘图也是不可能的.
是否可以将MKMapView的基础语言切换到与系统区域设置不同的语言?
例如,如果地址显示翻译的街道名称(英语),但我需要查看本地语言翻译(例如在中国大陆或日本).
另一种方法是包含一个本地地图引擎(如百度),但我希望看看iOS是否可以开箱即用.
我正在使用的应用程序是使用后台线程通过API下载图像列表,然后以幻灯片形式显示图像.
有一个后台任务(当前是AsyncTask)来定期获取新图像.
我没有得到关于错误的线程等的任何错误消息,只是AsyncTasks的第二个实例不会运行doInBackground方法.
以下是Activity的一些代码:
private DownloadTask mDownloadTask = null;
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(mDownloadTask != null) {
mDownloadTask.cancel(true);
}
mDownloadTask = new DownloadTask();
mDownloadTask.execute((Void[]) null);
}
};
mDownloadTask = new DownloadTask();
mDownloadTask.execute((Void[]) null);
}
Run Code Online (Sandbox Code Playgroud)
该DownloadTask如下所示:
@Override
protected List<String> doInBackground(Void... voids) {
// Download list of URLs from server, etc.
}
@Override
protected void onPostExecute(List<String> urls) {
mHandler.sendEmptyMessageDelayed(111, 5000);
}
Run Code Online (Sandbox Code Playgroud)
将调用该处理程序,将调用onPreExecute(在AsyncTask中)并且DownloadTask的初始运行(右上onCreate …
我喜欢这样的查询:
select data from table
where (x > 1 and x < 100)
or (x > 250 and x < 300)
Run Code Online (Sandbox Code Playgroud)
在ORMlite中,可以使用此代码:
final QueryBuilder<Data,Integer> qb = queryBuilder();
final Where<Data, Integer> w = qb.where();
w.or(
w.gt("x", 1).and().lt("x", 100),
w.gt("x", 250).and().lt("x", 300)
)
Run Code Online (Sandbox Code Playgroud)
虽然如果事先知道条件并且在编码时这很好,我需要动态添加条件.
基本上这种方法public com.j256.ormlite.stmt.Where<T,ID> or(com.j256.ormlite.stmt.Where<T,ID> left, com.j256.ormlite.stmt.Where<T,ID> right, com.j256.ormlite.stmt.Where<T,ID>... others)还不够.它需要其他or支持的方法ArrayList的Where条件.
谢谢你的任何建议.
这就是我配置APP的小部件的方法:
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="240dp"
android:minHeight="193dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/xyz_appwidget"
android:configure="com.xyz.activity.Configuration"
/>
Run Code Online (Sandbox Code Playgroud)
因此,Configuration一旦用户将小部件放在主屏幕上,系统就会调出活动.遗憾的是,如果未应用配置,则不应将此窗口小部件放在屏幕上.
我添加了一些调试输出.当用户为其主屏幕选择小部件时会发生这种情况.注意:这是配置活动在前面的时候,而不是小部件.
I/ActivityManager( 101): Start proc com.xyz for broadcast com.xyz/.widget.xyz.XyzWidgetProvider: pid=14371 uid=10050 gids={3003, 1015}
D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_ENABLED
D/XyzWidgetProvider(14371): onEnabled
D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_UPDATE
Run Code Online (Sandbox Code Playgroud)
这意味着即使未配置窗口小部件,也会触发两个事件(ENABLED,UPDATE).启用对我有意义,但更新显然不是.特别是当Configuration活动成功完成时,不会发送任何其他UPDATE事件.
我还读到,通过设置Configuration活动的结果,Activity.RESULT_CANCELED可以取消配置过程.但由于这显然是异步运行,我不知道如何使配置过程阻塞?以前遇到过这个人吗?
我的最后一点:我查看了Android Gallery Widget,它以某种方式正确管理,因此不会添加未配置的图库窗口小部件.但我怀疑一些HTC 魔术,因为日志不是很有帮助.