2016-11-17 5 views
0

Это мой первый раз, когда я использую модификацию, и я теряюсь в инструкциях. Я читал официальные руководства и немало других ответов и руководств, но у меня все еще есть проблемы. Похоже, что все они охватывают сложные сценарии, но не просто простую запись для одного поля.Дооснащение 2 простых почтовых кодировщика

Это детали того, что я пытаюсь сделать. Отправьте имя на сервер php:

Тип: application/x-www-form-urlencoded Имя полезной информации: напр. Имя = Джон% 20Smith

Я потратил довольно много времени, и есть основной, но я думаю, что мне не хватает Somthing:

Я работал, что мне нужен интерфейс, как это:

public interface ApiService { 

    @FormUrlEncoded 
    @POST("./") 
    Call<User> updateUser(@Field("Name") String name); 
} 

Тогда у меня есть модель для моего пользователя:

public class User { 
    @SerializedName("Name") 
    String name; 
} 

Тогда у меня модифицированную клиента:

класс RetroClient общественного {

private static final String ROOT_URL = "http://alarm.abc.ch/"; 
public static ApiService RETROFIT_CLIENT; 

    public static ApiService getInstance() { 
     //if REST_CLIENT is null then set-up again. 
     if (RETROFIT_CLIENT == null) { 
      setupRestClient(); 
     } 
     return RETROFIT_CLIENT; 
    } 

    private static void setupRestClient() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(ROOT_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     RETROFIT_CLIENT = retrofit.create(ApiService.class); 
    } 
} 

и я называю это, как это в функции пост в моей основной деятельности:

public void post(){ 
     mRetrofitCommonService = RetroClient.getInstance(); 

     call = mRetrofitCommonService.updateUser("test"); 
     call.enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Call<User> call, Response<User> response) { 

       System.out.println("responseee " + response); 
      } 

      @Override 
      public void onFailure(Call<User> call, Throwable t) { 
       System.out.println("eeee " + t); 
      } 
     }); 

И оттуда, что я полностью потерял. Я уверен, что это что-то маленькое, мне не хватает, но не знаю, что.

Заранее за вашу помощь.

EDIT: код был изменен, чтобы отразить мою текущую попытку. Это дает мне следующее сообщение об ошибке:

MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 2 path 
+0

где и как вы это называете? – Blackbelt

+0

У вас нет конкретной конечной точки, которую нужно позвонить или вы пытаетесь отправить имя непосредственно на test.com? Кроме того, вы действительно не говорите нам, что происходит не так. –

+0

Нет, это точно так же, как http://test.abc.ph –

ответ

1

Смотрите мой OnCreate метод, как я это сделал.

public class LoginActivity extends AppCompatActivity { 

    RetrofitCommonService mRetrofitCommonService; 
    Call<LoginResponse> call; 
    String firstName, lastName, userId, token; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     mRetrofitCommonService = RetrofitClient.getInstance(); 

     call = mRetrofitCommonService.doLogin("[email protected]", "12345678"); 
     call.enqueue(new Callback<LoginResponse>() { 
      @Override 
      public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) { 
       LoginData responseReg = response.body().getData(); 

       firstName = responseReg.getFirstName(); 
       lastName = responseReg.getLastName(); 
       userId = responseReg.getUserId(); 
       token = responseReg.getToken(); 

       System.out.println("responseee " + firstName + " " + lastName); 
      } 

      @Override 
      public void onFailure(Call<LoginResponse> call, Throwable t) { 
       System.out.println("eeee " + t); 
      } 
     }); 
    } 
} 

Мой класс RetrofitClient:

import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 

/** 
* Created by Danish.sharma on 7/22/2016. 
*/ 
public class RetrofitClient { 
    public static final String BASE_URL = "http://face2friend.com/"; 
    public static RetrofitCommonService RETROFIT_CLIENT; 


    public static RetrofitCommonService getInstance() { 
     //if REST_CLIENT is null then set-up again. 
     if (RETROFIT_CLIENT == null) { 
      setupRestClient(); 
     } 
     return RETROFIT_CLIENT; 
    } 

    private static void setupRestClient() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     RETROFIT_CLIENT = retrofit.create(RetrofitCommonService.class); 
    } 
} 

& RetrofitCommonService класс:

import com.aquasoft.retrofitexample.model.LoginResponse; 
import com.aquasoft.retrofitexample.model.RegistrationResponse; 
import com.aquasoft.retrofitexample.model.UserImageResponse; 
import com.aquasoft.retrofitexample.model.VehicleResponse; 

import okhttp3.MultipartBody; 
import okhttp3.RequestBody; 
import retrofit2.Call; 
import retrofit2.http.Field; 
import retrofit2.http.FormUrlEncoded; 
import retrofit2.http.Multipart; 
import retrofit2.http.POST; 
import retrofit2.http.Part; 

/** 
* Created by Danish.sharma on 7/22/2016. 
*/ 
public interface RetrofitCommonService { 

    /*@POST("http://server.pogogamessupport.com/parkway/api/v1/registration") 
    Call<RegistrationResponse> createUser(@Body RegistrationResponse user);*/ 

    @FormUrlEncoded 
    @POST("registration") 
    Call<RegistrationResponse> doRegistration(@Field("email") String email, @Field("firstname") String firstname, @Field("lastname") 
    String lastname, @Field("password") String password); 

    @FormUrlEncoded 
    @POST("login") 
    Call<LoginResponse> doLogin(@Field("email") String email, @Field("password") String password); 

    @FormUrlEncoded 
    @POST("listvehicle") 
    Call<VehicleResponse> getAllVehicle(@Field("userId") String userId, @Field("token") String token); 

    @Multipart 
    @POST("updateprofilepic") 
    Call<UserImageResponse> updateUserImage(@Part("userId") RequestBody userId, @Part("token") RequestBody token, @Part MultipartBody.Part image); 

} 

& последняя вещь, о зависимостях в build.gradle, которые я использую:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.google.code.gson:gson:2.6.2' 
    compile 'com.squareup.retrofit2:retrofit:2.1.0' 
    compile 'com.squareup.retrofit2:converter-gson:2.1.0' 
    compile 'com.squareup.okhttp:okhttp:2.4.0' 
    provided 'org.glassfish:javax.annotation:10.0-b28' 
} 

Сделайте комментарий, если вам по-прежнему нужна помощь.

+0

спасибо за помощь. Это дает мне неправильное исключение json. MalformedJsonException: используйте JsonReader.setLenient (true), чтобы принять неверный JSON в строке 1 столбца 2 путь –

+0

Я отредактировал свой код, чтобы отразить изменения. –

+0

проверить эту ссылку http://stackoverflow.com/questions/35984898/retrofit2-0-gets-malformedjsonexception-while-the-json-seems-correct –

1

объекта, возвращенного из getApiService() вы сможете позвонить updateUser().

В ответ на этот призыв вы тогда получите Call объект, как следующее:

Call<User> userUpdateCall = RetroClient.getApiService().updateUser(somestring);

Затем выполнить этот вызов синхронно выполнить следующие действия:

userUpdateCall.execute();

UPDATE

Прости, что я пропустил это раньше.В интерфейсе ApiService, сделать что-то вроде следующего:

@FormUrlEncoded 
@POST("YourPostEndpoint") 
Call<User> updateUser(@Field("Name") String name); 

АСИНХРОННЫЙ ВЫЗОВ

Для получения дополнительной информации см here

Для вызова асинхронно, вместо .execute() использовать следующий (код, взятый из выше ссылки и изменен в этом случае:

userUpdateCall.enqueue(new Callback<User>() { 
    @Override 
    public void onResponse(Call<User> call, Response<User> response) { 
     if (response.isSuccessful()) { 
      // user available 
     } else { 
      // error response, no access to resource? 
     } 
    } 

    @Override 
    public void onFailure(Call<List<Task>> call, Throwable t) { 
     Log.d("Error", t.getMessage()); 
    } 
} 
+0

Спасибо за ваш ответ. В моей основной деятельности я создал функцию, называемую post, и я ввел код, который вы написали. Я получил ошибку: java.lang.IllegalArgumentException: Отсутствует URL-адрес POST или параметр Url. –

+0

См. Выше для обновления, чтобы исправить это. – StuStirling

+0

Спасибо. Я смог установить «./» в качестве конечной точки и исправил эту ошибку. Но потом это дало мне ошибку, что я запускаю ее на нити ui? Я думал, что это был ахрикронус. –

2

Ты почти там! Теперь вы должны позвонить своему апи.

Пример кода

public class App { 

    private ApiService apiService = RetroClient.getApiservice(); 

    public static void main(String[] args) { 

     User user = new User("username") 
     Call<User> call = apiService.updateUser(user); 
     call.enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Call<User> call, Response<User> response) { 
       int statusCode = response.code(); 
       User user = response.body(); 
       // process success 
      } 

      @Override 
      public void onFailure(Call<User> call, Throwable t) { 
       // process failure 
      } 
     }); 

    } 

} 

Обновление с помощью метода пост() от основной деятельности

public void post() { 

    Call<User> call = apiService.updateUser("username"); 
    call.enqueue(new Callback<User>() { 
     @Override 
     public void onResponse(Call<User> call, Response<User> response) { 
      int statusCode = response.code(); 
      User user = response.body(); 
     } 

     @Override 
     public void onFailure(Call<User> call, Throwable t) { 
      // Log error here since request failed 
     } 
    }); 

} 
+0

спасибо за помощь. Я не уверен, где вы размещаете этот код. У меня есть метод в основной деятельности, называемый post, который я хотел использовать для его вызова. это ваш код, предназначенный для перехода в класс клиента или другой? –

+0

Можете ли вы поделиться кодом основного вида деятельности? –

+0

Я редактировал свой код с текущей попыткой. –

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