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.
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