2017-11-21 1 views
1

Folgende API rief ich zum Bearbeiten von Benutzerprofil. Ich muss Benutzerprofilbild senden, also benutzte ich multipart in API.@Part in multipart sendet die String-Parameter in Anführungszeichen

@Multipart 
@POST(ApiURLs.EDIT_USER_PROFILE) 
Call<EditProfileModel> EditUserProfile (@Part("user_id) String userId , 
@Part("user_name") String userName , 
@Part("language_id") String languageId , 
@Part("state_id") String stateId , 
@Part MultipartBody.Part 
profilePicture); 

Wenn Dienst aufgerufen die angeforderten Parameter wie

wäre

"user_id": "" 23 "" "user_name": "" Keval Shukla "" "language_id": "" 27 "" "state_id": "53"“

, wie ich entferne, dass doppelte Anführungszeichen mit Multipart

Antwort

0

verwenden RequestBody statt String

?.
@Part("user_id") RequestBody user_id, 

nennen es

String userId= "123456"; 
RequestBody id = 
     RequestBody.create(
       okhttp3.MultipartBody.FORM, userId); 
0

Sie andere Parameter als Datei als RequestBody senden.

@Multipart 
@POST(ApiURLs.EDIT_USER_PROFILE) 
Call<EditProfileModel> EditUserProfile (@Part("user_id) RequestBody userId , 
@Part("user_name") RequestBody userName , 
@Part("language_id") RequestBody languageId , 
@Part("state_id") RequestBody stateId , 
@Part MultipartBody.Part profilePicture); 

zu Konvertieren String zu RequestBody:

RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), userName); // Here userName is String 
0

Sie es falsch machen, wenn Sie Multipart als Körper-Typ sind Sie mit Körper-Typ jeder Anforderung Parameter angeben müssen.

Zum Beispiel senden Sie Datei (Bild, Video usw.) und String-Parameter. Sie müssen also alle Parameter angeben und in einen bestimmten Körpertyp konvertieren.

Sie müssen Parameter in zwei Teile zu unterteilen,

1) MultipartBody - Für Mediendatei

2) RequestBody - Für andere Zeichenfolge oder anderen Datentyp Parameter

z.B.

/*Create API Method*/ 
@Multipart 
@POST("apiurl") 
Call<Object> callMethodName(@Part("mobile_no") RequestBody mobile_no, /*String param */ 
          @Part("password") RequestBody password, /*String param */ 
          @Part MultipartBody.Part profile_img /*file param */); 

Ich habe Parse-Typ als multipart/form-data definieren, Sie nach Ihren Anforderungen definieren können,

public static final String MULTIPART_TYPE = "multipart/form-data"; 

nun wie unten Anforderungsparameter erstellen, /* Hinzufügen String Params */ RequestBody reqNumber = RequestBody.create (MediaType.parse (Konstanten.MULTIPART_TYPE), number.toString()); RequestBody reqPass = RequestBody.create (MediaType.parse (Konstanten.MULTIPART_TYPE), pass.toString());

/* Adding File*/ 
File file = new File(selectedImagePath); 
      RequestBody requestFile = RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE), file); 
      bodyFile = MultipartBody.Part.createFormData("profile_img", file.getName(), requestFile); 

Als letzten Schritt müssen Sie Anforderungsparameter zu API-Aufruf Methode wie unten passieren, so kann es Parameter identifizieren und an den Server senden.

/* Call API Method */ 
RestClient.getApiClient().callMethodName(reqNumber, reqPass, bodyFile); 
1

Es muss wie sein -

@Multipart 
@POST(ApiURLs.EDIT_USER_PROFILE) 
Call<EditProfileModel> EditUserProfile (
           @Part("user_id") RequestBody userId , 
           @Part("user_name") RequestBody userName , 
           @Part("language_id") RequestBody languageId , 
           @Part("state_id") RequestBody stateId , 
           @Part RequestBody profilePicture); 

Und erstellen requestBody,

File file = new File(imageURI.getPath()); 
RequestBody fbody = RequestBody.create(MediaType.parse("image/*"), file); // File requestBody 
RequestBody userName = RequestBody.create(MediaType.parse("text/plain"), userNameSTRING); // String requestBody 
Verwandte Themen