在Android发布版本中,HTTP 500内部服务器错误

时间:2018-06-06 08:20:51

标签: android http retrofit2 http-status-code-500

我对我的服务器进行了改装调用,返回JSON数据。从第一天起我一直在进行调试构建,一切都很好。就在昨天我生成了一个发布版本(android),发现调用失败,异常为" HTTP 500,内部服务器错误"。

我无法理解我陷入这种状态的两者之间有什么区别。 改造的代码如下,

public void populateFeeds(final String market, final String category, final String msaToken, final String language, final List<CategorizedFeeds> categorizedFeedsList){
        VmFeedsHub.this.feedClusterDataSetUpdate.set(false);
        VmFeedsHub.this.feedCategoryDataSetUpdate.set(false);
        BackendFactory.getFeedsServiceBackend().getFeedsMetadata(market, category, null, null)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Feeds>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {
                        ALog.i(TAG, LOG_PREFIX + " Feeds data retrieved empty/null for market: " + market + " with exception: " + e.getMessage());
                    }

                    @Override
                    public void onNext(Feeds feeds) {
                        ALog.i(TAG, LOG_PREFIX + " Feeds data retrieved successfully with feed count: " + feeds.getFeedsMetaDataArrayList().size() + " for market: " + market);
                        for (CategorizedFeeds categorizedFeeds : feeds.getFeedsMetaDataArrayList()) {
                            List<FeedMetadata> feedMetadataList = new ArrayList<>();
                            for(FeedsMetadata feedsMetadata : categorizedFeeds.getFeedsMetadataArrayList()){
                                FeedMetadata feedMetadata = new FeedMetadata(feedsMetadata.getHeadlineText(), feedsMetadata.getHeadlineImageURL(), feedsMetadata.getProviderName(), feedsMetadata.getProviderImageURL(), feedsMetadata.getPublishedDateTime(), feedsMetadata.getFeedURL(), feedsMetadata.getCmsId());
                                feedMetadataList.add(feedMetadata);
                            }
                            CategorizedFeeds categorizedFeed = new CategorizedFeeds(categorizedFeeds.getCategory(), feedMetadataList);
                            categorizedFeedsList.add(categorizedFeed);
                        }
                        if(category.equals(CATEGORY_CLUSTER))
                            VmFeedsHub.this.feedClusterDataSetUpdate.set(true);
                        else
                            VmFeedsHub.this.feedCategoryDataSetUpdate.set(true);
                    }
                });
    }

3 个答案:

答案 0 :(得分:0)

我发现这里的问题是我发送的POST正文。在自定义对象中,proguard重命名变量,因此服务器无法拦截它们。添加@SerializedName注释修复了问题。

答案 1 :(得分:0)

我针对此问题的解决方案是保留模型类以进行翻新。

将此代码添加到您的 proguard-rules.pro 文件

# keep model classes for retrofit
# packagename.directory.** { *; } 

-keep class com.packagename.mac.model.** { *; }
-keep class com.packagename.mac.data.response.** { *; }

答案 2 :(得分:0)

-keep class com.packagename.path_name_to_models

给出您正在使用的模型类的路径,问题将得到解决