我对我的服务器进行了改装调用,返回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);
}
});
}
答案 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
给出您正在使用的模型类的路径,问题将得到解决