2016-03-31 24 views
0

Ben php/json içinde bir web hizmetleri etrafında uğraş veriyorum.PHP Web Hizmeti JSON Kodlama

<?php 
    $answer = array('status'=>401, 'answer'=>''); 


    if($numWeeks%2 == 0) { 
     $answer['answer'] = 'trash'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = 200; 
    } 
    else { 
     $answer['answer'] = 'trach/recycle'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = 200; 
    } 

    header('Content-type: application/json'); 
    echo json_encode($answer); 
?> 

çıkışı:

{"status":200,"answer":"trash"} 

Ben de RETROFIT (v1.9) kullanılarak bir android uygulaması ile bu okumaya çalışıyorum.

Benim nesne sınıfıdır:

public class TrashResponse { 

    public int status; 
    public String answer; 


} 

Ama bu hatayı alıyorum: benim web hizmetinden benim json nesnesi ile ilgisi var Benim araştırma

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ 

. Sorunun ne olduğuna işaret edemem.

cevap

0

TrashResponse sınıfınızda durum dizgisi String türünde, ancak json'daki değer Tamsayı tipindedir. Değiştirin ve çalışıp çalışmadığını görmek için tekrar deneyin.

+0

işe yaramadı :(hala aynı hatayı alıyorum ... int türünü değiştirdim ve çalışmaz –

+0

jy kodlama UTF8 olmama ile ilgili olduğunu düşünüyor musunuz? –

0

dize olarak durumunu değiştirerek sunucu tarafı kod

<?php 
    $answer = array('status'=> "401", 'answer'=>''); 


    if($numWeeks%2 == 0) { 
     $answer['answer'] = 'trash'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = "200"; 
    } 
    else { 
     $answer['answer'] = 'trach/recycle'; 
     utf8_encode($answer['answer']); 
     $answer['status'] = "200"; 
    } 

    header('Content-type: application/json'); 
    echo json_encode($answer); 
?> 

yapabildiğiniz bu çözmek için iki yol vardır

VEYA

Sen android tarafında değiştirebilir

public class TrashResponse { 

    public int status; 
    public String answer; 
} 

Android tarafında değişiklik yapmak için daha iyi

0

Kullandığım sunucunun eski bir PHP sürümü var. Ben güncelleştirilmiş bir sürümü ile başka bir sunucuya açık ve aşağıdaki kodu eklendi:

header('Content-type: application/json'); 
echo json_encode($answer, JSON_FORCE_OBJECT); 

Bu geçerli bir JSON nesne döndürdü. Aslında, JSON geçersizdi çünkü uygulamam json nesnesini bir dize olarak görüyordu.