2017-01-10 6 views
0

私はAndroidプログラミングの初心者です。はじまったばかり。
AndroidとTomcatの間で通信をしようとしています。
ログインボタンをクリックするたびに、このエラーは私を狂わせてしまいます。ここで 改造誤差:改造防止注釈が見つかりませんでした。 (パラメータ#1)

 
java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1) 

は私のエラーです。..

java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1) 
       for method NetworkService.postLogin 
          at com.example.ab.MainActivity.networkServiceModule(MainActivity.java:68) 
          at com.example.ab.MainActivity$1.onClick(MainActivity.java:50) 

私はGradleの

compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' 

インターフェイスにこれらを追加しました:

public interface NetworkService { 
    @POST("/Attendance/login.jsp") 
    Call<PostJson> postLogin(PostJson postJson); 
} 

MainActivityの一部:

  ApplicationController application = ApplicationController.getInstance(); 
     application.buildNetworkService("xxx.xxx.xxx.xxx",8080); 
     networkService = ApplicationController.getInstance().getNetworkService(); 

     login_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String ID = id.getText().toString(); 
       String Pwd = password.getText().toString(); 
       networkServiceModule(ID,Pwd);  //this is line 50. 
      } 
     }); 

public void networkServiceModule(String ID, String Pwd){ 
     Log.d("networkServiceModule","ID : "+ID); 
     Log.d("networkServiceModule","PW : "+Pwd); 

     Call<PostJson> thumbnailCall = networkService.postLogin(new PostJson(ID,Pwd));  //this is line 68. 
     thumbnailCall.enqueue(new Callback<PostJson>() { 
      @Override 
      public void onResponse(Response<PostJson> response, Retrofit retrofit) { 
       if(response.isSuccess()) { 
        String resultCode = response.body().getResult_code().toString(); 
        Toast.makeText(getBaseContext(), "Login : " + resultCode, Toast.LENGTH_SHORT).show(); 
       } else { 
        int statusCode = response.code(); 
        Log.d("networkServiceModule", "response Code : "+statusCode); 
       } 
      } 

ApplicationControllerに:

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import retrofit.GsonConverterFactory; 
import retrofit.Retrofit; 

public class ApplicationController extends Application { 
    private static ApplicationController instance; 
    public static ApplicationController getInstance() { 
     return instance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     ApplicationController.instance = this; 
    } 

    private NetworkService networkService; 
    public NetworkService getNetworkService() { 
     return networkService; 
    } 
    private String baseUrl; 

    public void buildNetworkService(String ip, int port) { 
     synchronized (ApplicationController.class) { 
      baseUrl = String.format("http://%s:%d", ip, port); 
      Gson gson = new GsonBuilder() 
        .create(); 

      GsonConverterFactory factory = GsonConverterFactory.create(gson); 

      Retrofit retrofit = new Retrofit.Builder() 
        .baseUrl(baseUrl) 
        .addConverterFactory(factory) 
        .build(); 
      networkService = retrofit.create(NetworkService.class); 
     } 
    } 
} 

私はStackOverflowのから得たいくつかのソリューションを適用しようと保たれますが、私のための1つを見つけることができませんでしたしました。これはStackOverflowの上の私の最初の質問です

、醜いコードをごめんね。

+1

あなたは '使用している任意の理由改造:2.1.0'' com.squareup.retrofit2 'com.squareup.retrofit:'対2.0.0-beta2'':改造を'? – Egor

答えて

1

retrofitメソッドのパラメータに注釈を付けるのを忘れました。次

@POST("/Attendance/login.jsp") 
Call<PostJson> postLogin(@Body PostJson postJson); 
0

を試してみて、問題がPostJson postJsonであり、すべての以前のパラメータは、後付け注釈に関連付けする必要があります。あなたのケースでは、あなたの投稿要求の本文でなければなりません。

Call<PostJson> postLogin(@Body PostJson postJson); 
+0

ありがとう:) – James

関連する問題