2015-04-20 2 views
4

У меня проблема с модификацией. Я довольно новичок в этой библиотеке, поэтому любая помощь для меня значила бы. Я пытаюсь войти в систему из приложения на сервер made based on this tutorial (http://localhost/task_manager/v1/login) и получить json с информацией о пользователе в результате.Дооснащение + метод POST + www-form-urlencoded

MainActivity.java

private void requestData() { 

    String email = "[email protected]"; 
    String password = "chrome11"; 
    //retrofit tworzenie polecenia 
    RestAdapter adapter = new RestAdapter.Builder() 
     .setEndpoint(ENDPOINT) 
     .build(); 

    //tworzenie api klasy flowers 
    UsersAPI api = adapter.create(UsersAPI.class); 


    api.login(email, password, new Callback <User>() {@ 
     Override 
     public void failure(final RetrofitError error) { 
     android.util.Log.i("example", "Error, body: " + error.getBody().toString()); 

     }@ 
     Override 
     public void success(User user, Response response) { 
     // Do something with the User object returned 
     //Log.d("hello", response.toString()); 
     } 
    }); 

UsersApi.java

public interface UsersAPI { 

    // @Headers({ 
    //  "content-type:application/x-www-form-urlencoded" 
    // }) 
    @FormUrlEncoded 
    @POST("/login") 
    public void login(@Field("email") String email, @Field("password") String password, 
    Callback <User> callback); 
} 

User.java

public class User { 

    private String error; 
    private String name; 
    private String email; 
    private String apiKey; 
    private String createdAt; 

    public String getError() { 
    return error; 
    } 
    public void setError(String error) { 
    this.error = error; 
    } 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
    public String getEmail() { 
    return email; 
    } 
    public void setEmail(String email) { 
    this.email = email; 
    } 
    public String getApiKey() { 
    return apiKey; 
    } 
    public void setApiKey(String apiKey) { 
    this.apiKey = apiKey; 
    } 
    public String getCreatedAt() { 
    return createdAt; 
    } 
    public void setCreatedAt(String createdAt) { 
    this.createdAt = createdAt; 
    } 


} 
04-20 01:37:46.358: D/gralloc_goldfish(671): Emulator without GPU emulation detected. 
04-20 01:37:55.469: D/dalvikvm(671): GC_CONCURRENT freed 200K, 3% free 10978K/11271K, paused 26ms+15ms, total 87ms 
04-20 01:38:20.518: D/AndroidRuntime(671): Shutting down VM 
04-20 01:38:20.518: W/dalvikvm(671): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
04-20 01:38:20.540: E/AndroidRuntime(671): FATAL EXCEPTION: main 
04-20 01:38:20.540: E/AndroidRuntime(671): java.lang.NullPointerException 
04-20 01:38:20.540: E/AndroidRuntime(671): at retrofit.RetrofitError.getBody(RetrofitError.java:80) 
04-20 01:38:20.540: E/AndroidRuntime(671): at com.hanselandpetal.catalog.MainActivity$1.failure(MainActivity.java:87) 
04-20 01:38:20.540: E/AndroidRuntime(671): at retrofit.CallbackRunnable$2.run(CallbackRunnable.java:53) 
04-20 01:38:20.540: E/AndroidRuntime(671): at android.os.Handler.handleCallback(Handler.java:615) 
04-20 01:38:20.540: E/AndroidRuntime(671): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-20 01:38:20.540: E/AndroidRuntime(671): at android.os.Looper.loop(Looper.java:137) 
04-20 01:38:20.540: E/AndroidRuntime(671): at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-20 01:38:20.540: E/AndroidRuntime(671): at java.lang.reflect.Method.invokeNative(Native Method) 
04-20 01:38:20.540: E/AndroidRuntime(671): at java.lang.reflect.Method.invoke(Method.java:511) 
04-20 01:38:20.540: E/AndroidRuntime(671): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-20 01:38:20.540: E/AndroidRuntime(671): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-20 01:38:20.540: E/AndroidRuntime(671): at dalvik.system.NativeStart.main(Native Method) 
+0

Пожалуйста, напишите больше о вашей stacktrace, чтобы мы могли помочь. – Emmanuel

ответ

0

NullPoinerException выбрасывают по этой линии:

error.getBody().toString() 

Я считаю, что RetrofitError вы получаете обратно не имеет Body, поэтому, когда вы звоните getBody() на error вы получите null. Затем, набрав toString(), он поднимет NPE.

+0

Да, это имеет смысл. Тем не менее это означает, что соединения терпят неудачу, любые идеи почему? – Kamajabu

+0

Запросы не работают, поэтому вызывается 'failure()'. Посмотрите на объект ошибки, который вы вернетесь, и посмотрите, что он говорит. – Emmanuel

+0

Ха, понял, что один (fail = fail; P). java.io.EOFException. Теперь попробуйте решение OkHttp. – Kamajabu

Смежные вопросы