Когда данные публикации показывают эту ошибку Модификация Android Ожидается BEGIN_OBJECT, но имеет STRING

Здравствуйте, разработчик! Я занимаюсь разработкой веб-системы чата с использованием android и php (laravel), поэтому в моем случае я использую Rest API для отправки сообщений чата с использованием laravel.my. Проблема в том, что когда я отправляю данные на сервер (отправляю сообщения), нет никаких сообщения о случаях сохраняются в database.my из моего ответа клиента Android всегда идут в "onFailure" и отображают эту ошибку

Ожидаемый BEGIN_OBJECT, но был STRING в строке 1, путь 1, столбец $

я пытаюсь многими способами, к сожалению, я не могу найти правильный способ решить эту проблему. любой может помочь мне, это ценная помощь для меня. спасибо...

это мой код API

 public function PostDataToChatRoom(Request $request){

  $ChatRoom=$request->ChatroomId;

  if($ChatRoom == '1'){

  }
  elseif ($ChatRoom == "2"){

      $message= new Message();
      $message->SenderId = $request->input('SenderId');
      $message->ChatroomId = $request ->input('ChatroomId');
      $message->MessageTxt =$request ->input('MessageTxt');
      $message->SenderName=$request->input('SenderName');

      if($message->save())
      {
          event(
              new ForxChatEvent($message)
          );

          return response()->json([$message],200);
      }
  }
  else{
      echo 'aaa';
  }

}

это мои данные ответа API

[
{
    "SenderId": "123",
    "ChatroomId": "2",
    "MessageTxt": "yooo",
    "SenderName": "Test",
    "updated_at": "2018-06-18 12:44:41",
    "created_at": "2018-06-18 12:44:41",
    "id": 189
}
]

это мой сегмент кода Android... Использование библиотеки дооснащения данных на сервер

Класс ApiInterface

public interface PostChatRoomMessage {
@POST("/SendToChatRoom")
Call<Message> PostMessage(@Body Message message);
}

Класс сообщения

public class Message implements Serializable {

@SerializedName("messages")
@Expose
private List<Message> messages;

public List<Message> getMessages() {
    return messages;
}

public void setMessages(List<Message> messages) {
    this.messages = messages;
}

@SerializedName("SenderId")
@Expose
private String senderId;
@SerializedName("ChatroomId")
@Expose
private String chatroomId;
@SerializedName("MessageTxt")
@Expose
private String messageTxt;
@SerializedName("SenderName")
@Expose
private String senderName;
@SerializedName("updated_at")
@Expose
private String updatedAt;
@SerializedName("created_at")
@Expose
private String createdAt;
@SerializedName("id")
@Expose
private int id;

public String getSenderId() {
    return senderId;
}

public void setSenderId(String senderId) {
    this.senderId = senderId;
}

public String getChatroomId() {
    return chatroomId;
}

public void setChatroomId(String chatroomId) {
    this.chatroomId = chatroomId;
}

public String getMessageTxt() {
    return messageTxt;
}

public void setMessageTxt(String messageTxt) {
    this.messageTxt = messageTxt;
}

public String getSenderName() {
    return senderName;
}

public void setSenderName(String senderName) {
    this.senderName = senderName;
}

public String getUpdatedAt() {
    return updatedAt;
}

public void setUpdatedAt(String updatedAt) {
    this.updatedAt = updatedAt;
}

public String getCreatedAt() {
    return createdAt;
}

public void setCreatedAt(String createdAt) {
    this.createdAt = createdAt;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}`}

`

Метод отправки сообщения

 public void SendMessage(){

    String SenderId="123";
    String ChatroomId="2";
    String Message=messageEdit.getText().toString();
    String SenderName="yooo";



    if(TextUtils.isEmpty(Message)){
        AlertDialog.Builder builder=new AlertDialog.Builder(Chat.this);
        builder.setMessage("Please add Some Message")
                .setNegativeButton("Ok",null);

        AlertDialog alertDialog=builder.create();
        alertDialog.show();
    }
    else {
        Log.e("not empryy","not empty");

try{
Message message=new Message();
message.setSenderId(SenderId);
message.setChatroomId(ChatroomId);
message.setMessageTxt(Message);
message.setSenderName(SenderName);

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .addInterceptor(new okhttp3.Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {

                Request request = chain.request().newBuilder()

                        .addHeader("Content-Type", "text/html; charset=UTF-8")
                        .build();

                return chain.proceed(request);

            }
        }).addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
        .readTimeout(60, TimeUnit.SECONDS)
        .connectTimeout(60, TimeUnit.SECONDS)
        .build();

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setLenient();
Gson gson = gsonBuilder.create();





Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Config.Api)
        .client(okHttpClient)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

PostChatRoomMessage service=retrofit.create(PostChatRoomMessage.class);
Call<Message> call = service.PostMessage(message);

Log.d("onResponse", "There rtutrutris an error");
call.enqueue(new Callback<Message>() {
    @Override
    public void onResponse(Call<Message> call, Response<Message>response) {
        Log.d("responce sucessregister", response.message());
        messageEdit.setText("");
    }
    @Override
    public void onFailure(Call<Message> call, Throwable t) {
        Log.d("OnbbbbResponse", t.getMessage());
    }    });
}
catch (Exception e){
Log.d("onResponse", "There is an error");
e.printStackTrace();
}        }
}

2 ответа

На мой взгляд, вы должны убедиться, что возвращаемое значение всегда Json. Теперь вы иногда просто возвращаете строку:

echo 'aaa';

и это может быть причиной этой ошибки.

Также в некоторых других случаях вы не возвращаете ответ, который также может быть проблемой, например:

if($ChatRoom == '1'){

}

здесь снова ни один объект не будет возвращен в качестве ответа.

Вы можете попытаться объявить объект Array

 class Message{

    @SerializedName("SenderId")
    @Expose
    private String senderId;
    @SerializedName("ChatroomId")
    @Expose
    private String chatroomId;
    @SerializedName("MessageTxt")
    @Expose
    private String messageTxt;
    @SerializedName("SenderName")
    @Expose
    private String senderName;
    @SerializedName("updated_at")
    @Expose
    private String updatedAt;
    @SerializedName("created_at")
    @Expose
    private String createdAt;
    @SerializedName("id")
    @Expose
    private int id;

    public String getSenderId() {
        return senderId;
    }

    public void setSenderId(String senderId) {
        this.senderId = senderId;
    }

    public String getChatroomId() {
        return chatroomId;
    }

    public void setChatroomId(String chatroomId) {
        this.chatroomId = chatroomId;
    }

    public String getMessageTxt() {
        return messageTxt;
    }

    public void setMessageTxt(String messageTxt) {
        this.messageTxt = messageTxt;
    }

    public String getSenderName() {
        return senderName;
    }

    public void setSenderName(String senderName) {
        this.senderName = senderName;
    }

    public String getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(String updatedAt) {
        this.updatedAt = updatedAt;
    }

    public String getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(String createdAt) {
        this.createdAt = createdAt;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

public interface PostChatRoomMessage {
    @POST("/SendToChatRoom")
    Call<Message[]> PostMessage(@Body Message message);
} 

https://drive.google.com/open?id=1_chkVXQHhOsYgbJtWHokBs1Y-cSLtiBb

:)

Другие вопросы по тегам