Когда данные публикации показывают эту ошибку Модификация 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
:)