简体   繁体   中英

How to parse json filen with retrofit2 for login?

First of all; I am so beginner for using to retrofit2. I am trying to parse JSON file. My connection PHP file is true. (its name is ayar.php). And I guess that There is no mistake in my listeleme.php because I can see all values. But When I click to my button, log cat gives me an exception. My purpose is; I want to check my list for login. İf There is such user. Activity pass to other activity else gives me toast. Exception :

com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 40 path $[1]

listeleme.php :

<?php
include ('ayar.php');

class kullanici
{
    public $id = "";
    public $isim = "";
    public  $sifre = "";


}
$kl = new kullanici();

$bak = mysqli_query($connect, "select * from kullanici" );
$değer = mysqli_num_rows($bak);
$sayac = 0 ;
echo ("[");
while ($göster = mysqli_fetch_assoc($bak))
{
      $sayac = $sayac+1 ;
    $kl ->id=$göster["id"];
    $kl ->isim=$göster["isim"];
    $kl ->sifre=$göster["sifre"];
    echo(json_encode($kl));
    if ($sayac != $değer)
    {
        echo (",");

    }
    echo ("]");


}
?>

My models class :

public class kullanici {
    private String sifre;
    private String id;
    private String isim ;

    public String getSoyad() {
        return sifre;
    }

    public void setSoyad(String sifre) {
        this.sifre = sifre;
    }

    public String getId() {
        return id;
    }

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

    public String getIsim() {
        return isim;
    }

    public void setIsim(String isim) {
        this.isim = isim;
    }

    @Override
    public String toString() {
        return "kullanici{" +
                "sifre='" + sifre + '\'' +
                ", id='" + id + '\'' +
                ", isim='" + isim + '\'' +
                '}';
    }
}

RestApi interface :

public interface RestApi {
//2 Cİ yapılan iş.
    @FormUrlEncoded
    @POST("/ekle.php")// url nin sonundaki isim.
    // Post edilecek değişkenlerin adı oldugu gibi yazılır.
//phpbyadmin" deki aynı isim olmasına gerek yok.
    Call<Result> addUser(@Field("ad") String ad ,  @Field("eposta")String eposta , @Field("sifre")String sifre ,@Field("cinsiyet")
            String cinsiyet , @Field("telefon_number") String telefon_number , @Field("dogum_tarihi") String dogum_tarihi
    , @Field("sehir") String sehir , @Field("ilce") String ilce);



   @GET("/listeleme.php")
    Call<List<kullanici>> listele();
}

ManagerAll class :

public class ManagerAll extends BaseManager {


private static ManagerAll ourinstance = new ManagerAll();


public static synchronized ManagerAll getinstance()
{


    return  ourinstance ;
}

public Call<Result> ekle (String ad , String eposta ,String sifre ,   String cinsiyet ,String telefon_number, String dogum_tarihi
,String sehir ,String ilce){
Call<Result> x = getRestApi().addUser(ad,eposta ,sifre,cinsiyet,telefon_number,dogum_tarihi,sehir,ilce);

return x ;


}

public Call<List<kullanici>> checkusers(){

    Call<List<kullanici>> y = getRestApi().listele();
    return y;

}


    }

Lastly My activity :

 giris_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String kullanıcı = kullanıcı_edittext.getText().toString();
                String sifre = sifre_edittext.getText().toString();


                retrofit2.Call<List<kullanici>> y = ManagerAll.getinstance().checkusers();
                y.enqueue(new Callback<List<kullanici>>() {
                    @Override
                    public void onResponse(Call<List<kullanici>> call, Response<List<kullanici>> response) {
                        Log.i(TAG, "Sonuc: " + response.body().toString());
                        Toast.makeText(giris_ekrani.this, "It works", Toast.LENGTH_SHORT).show();
                        Intent bottom_bar_intent = new Intent(giris_ekrani.this ,bottom_bar.class);
                        startActivity(bottom_bar_intent);
                    }

                    @Override
                    public void onFailure(Call<List<kullanici>> call, Throwable t) {
                        Toast.makeText(giris_ekrani.this, "doesnt", Toast.LENGTH_SHORT).show();
                        Log.i(TAG, "Sonuc: " + t.toString());
                    }
                });

It is my json values :

[{"id":"9","isim":"as","sifre":"123"},{"id":"10","isim":"selam","sifre":"1234"},{"id":"11","isim":"berkay214214","sifre":"315"},{"id":"12","isim":"werew","sifre":"0"},{"id":"13","isim":"berk","sifre":"1234"}]

Set up Retrofit to use GsonConverterFactory . On this way it will be lot easier to parse JSON . For example:

 private static Retrofit retrofit;

public static Retrofit getRetrofit() {
    if (retrofit == null)
        retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
                .client((new OkHttpClient()))
                .addConverterFactory(GsonConverterFactory
                        .create())
                .build();
    return retrofit;
}

Also you will need to add in gradle :

implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM