小编Seb*_*oth的帖子

Spring Rest模板用法导致EOFException

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)

spring android eof android-annotations

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

CoordinatorLayout忽略具有锚点的视图的边距

鉴于我正在使用这样的布局:

<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将忽略保证金

如何将FAB按预期向上移动20dp?

android android-support-library androiddesignsupport

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

通过RSpec发送自定义标头

鉴于我的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.

rspec ruby-on-rails rspec-rails ruby-on-rails-3

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

在TextView/EditText上使用"android:textAppearance"失败,但"样式"有效

这是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.

android

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

透明QWidget/QScrollArea背景样式设置无效

这个问题涉及到

我在这里问,因为我相信SO社区可能有办法解决这个问题.

所以我喜欢将ScrollArea的背景颜色设置为透明或自定义背景图像,因为它将包含一些横幅.我已经在Qt Creator(Designer)中运行了它!:-):

Qt Creator样本

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

仿真器样本

这是我的布局树:

布局树

这是我正在使用的样式表(附加并设置为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向我展示了合适的设计......

qt symbian

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

使用图层列表时,<size>属性无用吗?

鉴于我有一个背景可绘制为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)

但是一旦我使用上面显示的代码,我的子弹点看起来像这样:

上面显示的XML的结果

似乎<size>标签被完全忽略了.

你会如何解决这个问题?使用9patch,是的,我知道..也许这是最容易做到的......但实际上我希望找到一个XML解决方案,因为它在未来更灵活.

自定义绘图也是不可能的.

android

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

切换MKMapView显示语言

是否可以将MKMapView的基础语言切换到与系统区域设置不同的语言?

例如,如果地址显示翻译的街道名称(英语),但我需要查看本地语言翻译(例如在中国大陆或日本).

另一种方法是包含一个本地地图引擎(如百度),但我希望看看iOS是否可以开箱即用.

iphone ios

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

从Handler调用的AsyncTask不会执行doInBackground

我正在使用的应用程序是使用后台线程通过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 …

android android-asynctask

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

ORMLite中的多个组合OR条件

我喜欢这样的查询:

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支持的方法ArrayListWhere条件.

谢谢你的任何建议.

java ormlite

11
推荐指数
1
解决办法
8727
查看次数

使用android:configure配置的窗口小部件即使配置未完成也将接收onUpdate

这就是我配置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 魔术,因为日志不是很有帮助.

android android-widget

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