java.lang.IllegalArgumentException:找不到Retrofit注释。 (参数#1)

时间:2017-04-07 10:27:10

标签: android

我遇到错误没有找到Retrofit注释。 (参数#1)。我试图通过谷歌搜索但没有:

FragmentComment.java

private void createNew() {
    subscriptions.add(leaderSubscription);
    commentDTO.setType(Constants.TRAINING_DAY_OLD);
    Observable<ResultResponse> observable = candidateRequest.postResultCandidate(commentDTO);
    leaderSubscription = observable.subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new JvSubscriber<ResultResponse>(activity) {
                @Override
                public void handleSuccess(ResultResponse baseResponse) {
                    if (Constants.SUCCESS.equals(baseResponse.getSuccess())) {
                        Intent intent = new Intent(getActivity(), TrainingActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        getActivity().startActivity(intent);
                        setEnableConfirm();
                        Toast.makeText(getActivity(), getString(R.string.success), Toast.LENGTH_SHORT).show();
                    } else {
                        btnConfirm.setText(R.string.title_enable);
                        btnConfirm.setBackgroundResource(R.drawable.custom_button_history);
                        btnConfirm.setEnabled(true);
                        Toast.makeText(getActivity(),baseResponse.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                    Log.d(TAG, "JV-SUCCESS: ");

                }

            });
    subscriptions.add(leaderSubscription);

CandidateRequest.java

public interface CandidateRequest {


@Headers("Content-Type: application/json")
@POST(Constants.URL_RESULT_CANDIDATE)
Observable<ResultResponse> postResultCandidate(
        @Body CommentDTO commentDTO);

@GET(Constants.URL_STAFF_SCHEDULE_LIST)
Observable<StaffResponse> getSchedulesByStaffId(
        @Path("id") long maidId,
        @Path("fromDate") long fromDate,
        @Path("toDate") long toDate);

@GET(Constants.URL_LEADER_NAME)
Observable<CandidateLeaderResponse> getLeaderName(
);

file build.gradle

buildscript {
repositories {
    mavenCentral()
}

dependencies {
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

}

申请插件:&#39; com.android.application&#39; apply plugin:&#39; android-apt&#39;

android {

compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:23.0.2'
compile 'com.android.support:support-v13:23.0.0'
compile 'com.android.support:design:23.0.1'
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.squareup.retrofit:retrofit:1.7.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
compile 'com.squareup.okhttp:okhttp:2.0.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'
compile 'com.fasterxml.jackson.core:jackson-databind:2.4.+'
compile 'com.fasterxml.jackson.core:jackson-core:2.4.+'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.+'
compile 'com.squareup:otto:1.3.5'
compile 'com.onesignal:OneSignal:3.+@aar'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:recyclerview-v7:23.2.0'
ext.googlePlayVersion = "9.6.1"
compile "com.google.firebase:firebase-ads:$googlePlayVersion"
compile "com.google.firebase:firebase-database:$googlePlayVersion"
compile "com.google.android.gms:play-services-ads:$googlePlayVersion"
compile "com.google.android.gms:play-services-maps:$googlePlayVersion"
compile "com.google.android.gms:play-services-gcm:$googlePlayVersion"
compile "com.google.android.gms:play-services-analytics:$googlePlayVersion"
compile "com.google.android.gms:play-services-location:$googlePlayVersion"
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'

}

3 个答案:

答案 0 :(得分:1)

问题

您正在使用Retrofit 1注释和Retrofit 2,反之亦然。版本1和2可以并排使用。这并不意味着他们的注释与其他版本兼容。

原因

你的dependencies街区一团糟。

解决方案

删除Retrofit 1.仅在您自己的新代码中使用Retrofit 2。修复导入语句,从retrofit2.*包中导入Retrofit注释。

更多建议

删除OkHttp 2并显式添加OkHttp 3(Retrofit 2已经隐式添加了OkHttp 3.0,这还不够好)。只在您自己的新代码中使用OkHttp 3。

请勿使用不同版本的不同支持库。使用与Google Play服务相同的方法。将版本字符串提取到变量并使用它。您还指定了两次appcompat-v7。如果您不遵循此特定建议,则最终会出现运行时错误。

答案 1 :(得分:0)

您需要在app gradle依赖项中声明改造。

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
像这样

答案 2 :(得分:0)

确保Constants.URL_STAFF_SCHEDULE_LIST包含您在getSchedulesByStaffId上声明的参数列表。可能你错过了{id}占位符。

也许最好还粘贴您的网址常量,以便我们提供更好的帮助