2017-01-10 3 views
0

Ich bin ein Anfänger in Android-Programmierung. Gerade gestartet.
Jetzt versuche ich mit Retrofit zwischen Android und Tomcat Server zu kommunizieren.
aber immer wenn ich auf Login-Schaltfläche klicke, hält mich dieser Fehler für verrückt. Retrofit-Fehler: Keine Retrofit-Annotation gefunden. (Parameter # 1)

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

Hier sind meine Fehler ..

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) 

Ich habe diese in gradle

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

Schnittstelle:

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

ein Teil von 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); 
       } 
      } 

Application:

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); 
     } 
    } 
} 

Ich habe immer wieder versucht, einige Lösungen anwenden, die ich von Stackoverflow bekam, aber nicht ein, für meine finden ..

Dies ist meine erste Frage auf Stackoverflow Entschuldigung für Codes, die hässlich aussehen.

+1

Gibt es Gründe, die Sie verwenden ' 'com.squareup.retrofit: Nachrüstung: 2.0.0-beta2'' vs'' com.squareup.retrofit2: nachrüstbar: 2.1.0''? – Egor

Antwort

1

Sie haben vergessen, den Parameter der Nachrüstmethode zu kommentieren. Versuchen Sie, das folgende

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

das Problem mit PostJson postJson ist, hat jeder früherer Parameter mit einer Retrofit Annotation zugeordnet werden. In Ihrem Fall sollte das der Hauptteil Ihrer Postanfrage sein.

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

Vielen Dank :) – James

Verwandte Themen