2015-05-27 3 views
1

Я новичок в android, и я пытаюсь понять библиотеку Retrofit, чтобы использовать ее в приложении для входа, но я не могу заставить ее работать. Вот мой пример кода.Вход в систему с дооснащением Android

LoginAPI.java

public interface LoginAPI { 
    @POST("/login.php") 
    public void getFeed(String username,String password,Callback<LoginResponse> response); 

} 

MainActivity.java

login.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RestAdapter restAdapter = new RestAdapter.Builder() 
        .setEndpoint("https://xxx.xxx.xxx.xxx") 
        .build(); 


      LoginAPI api = restAdapter.create(LoginAPI.class); 
      api.getFeed(username,password,new Callback<LoginResponse>() { 
       @Override 
       public void success(LoginResponse loginResponse, Response response) { 
        Toast.makeText(MainActivity.this,"Logged in",Toast.LENGTH_LONG).show(); 
       } 

       @Override 
       public void failure(RetrofitError error) { 
        Toast.makeText(MainActivity.this,"Login Failed",Toast.LENGTH_LONG).show(); 

       } 
      }); 
     } 
    }); 

} 
+0

Make дооснащения призывает отдельный поток или AsyncTask и с существующим кодом вы получаете сообщение об ошибке? если да, опубликуйте журнал. –

+0

Какова ошибка, с которой вы столкнулись? Действительно, вам не нужно делать вызовы в отдельном потоке или в AsyncTask. – androidevil

ответ

0

Make дооснащения вызовы на отдельном потоке или AsyncTask

Попробуйте

login.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

    Thread fetch = new Thread(new Runnable() { 
     @Override 
     public void run() { 

       RestAdapter restAdapter = new RestAdapter.Builder() 
       .setEndpoint("https://xxx.xxx.xxx.xxx") 
       .build(); 


     LoginAPI api = restAdapter.create(LoginAPI.class); 
     api.getFeed(username,password,new Callback<LoginResponse>() { 
      @Override 
      public void success(LoginResponse loginResponse, Response response) { 
       Log.d("Response","Logged In"); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       Log.d("Response","Failed"); 

      } 
     }); 
    } 
    } 

fetch.start(); 
}); 

Toast может не работать из другого потока Log.d().

+0

Я пробовал, но это дает мне ошибку. Нет аннотации дооснащения. Если я поставлю аннотации, я получаю сообщение об ошибке. Параметры @Field могут использоваться только с кодировкой формы .... – Vasilis13

+0

Вы уверены, что login.php REST отвечает правильно? Это ответ? Я имею в виду дооснащение вызова. –

0

Я думаю, вам не хватает аннотаций в интерфейсе, замените

public interface LoginAPI { 
    @POST("/login.php") 
    public void getFeed(String username,String password,Callback<LoginResponse> response); 
} 

с

public interface LoginAPI { 
    @POST("/login.php") 
    public void getFeed(@Field("username") String username, @Field("password")String password,Callback<LoginResponse> response);  
} 

и проверить работает ли или нет

-1

если вы пытаетесь добавить имя пользователя и пароль в качестве параметров URL-адреса, то есть

?username=XXX&password=YYYY 

изменение общедоступный интерфейс LoginAPI { @POST ("/ login.php") общественности недействительным (имя пользователя String, String пароль, ответ Callback) getFeed; }

с

public interface LoginAPI { 
    @POST("/login.php") 
    public void getFeed(@Query("username") String username, @Query("password") String password,Callback<LoginResponse> response);  
} 
Смежные вопросы