Не могу получить ответ от API с помощью модернизации - PullRequest
1 голос
/ 09 мая 2019

Мой интерфейс выглядит следующим образом:

@GET("logCheck.php?username=mhaa96")
Call<Splash> getDaysLeft();

Ниже приводится моя ссылка API,

https://www.aidedtrade.com/aidedTrade_app/logCheck.php?username=mhaa96

Ниже приведен мой ответ API

 {
  "status": "success",
  "data": {
  "userName": "MHaa96",
  "days_left": "328"
 }
 }

следующий - это мой класс модели

 public class Splash {
  @SerializedName("userName")
  @Expose
  private String userName;
  @SerializedName("days_left")
  @Expose
  private String daysLeft;

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getDaysLeft() {
    return daysLeft;
}

public void setDaysLeft(String daysLeft) {
    this.daysLeft = daysLeft;
}

следующий - это действие, когда я вызываю api, но ноль ответа в Daysleft

public void apiCalling() {
    APIinterface apIinterface = 
  APIClient.getClient().create(APIinterface.class);
    retrofit2.Call<Splash> call = apIinterface.getDaysLeft();
    Log.e("callMethod", "apiCalling: " + call);
    call.enqueue(new Callback<Splash>() {
        @Override
        public void onResponse(retrofit2.Call<Splash> call, 
Response<Splash> response) {
            String alerts = response.body().getDaysLeft();
            Log.e("DaysLeft", "onResponse: " + alerts);
            Log.e("responce", "onResponse: " + 
response.body().getUserName());
        }

        @Override
        public void onFailure(retrofit2.Call<Splash> call, Throwable t) {
            Toast.makeText(getApplicationContext(), "Please Check your 
 internet connection", Toast.LENGTH_SHORT).show();
        }
    });
 }

следующее - это мой API-клиент, где я устанавливаю базовый URL

public static final String BASE_URL = 

"https://www.aidedtrade.com/aidedTrade_app/"; приватная статическая Модификация дооснащения = ноль;

public static Retrofit getClient() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new 
  OkHttpClient.Builder().addInterceptor(interceptor).build();

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

мой второй класс модели

public class DaysLeft {

@SerializedName("status")
@Expose
private String status;
@SerializedName("data")
@Expose
private Data data;

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public Data getData() {
    return data;
}

public void setData(Data data) {
    this.data = data;
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Пожалуйста, проверьте следующий пример кода. Я обновил ваш обратный звонок. Работает нормально.

интерфейс выглядит следующим образом,

@GET("logCheck.php?username=mhaa96")
Call<DaysLeft> getDaysLeft();

Классы моделей следующие: DaysLeft.java

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class DaysLeft {
    @SerializedName("status")
    @Expose
    private String status;
    @SerializedName("data")
    @Expose
    private Splash data;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Splash getData() {
        return data;
    }

    public void setData(Splash data) {
        this.data = data;
    }
}

Splash.java

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Splash {
    @SerializedName("userName")
    @Expose
    private String userName;
    @SerializedName("days_left")
    @Expose
    private String daysLeft;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getDaysLeft() {
        return daysLeft;
    }

    public void setDaysLeft(String daysLeft) {
        this.daysLeft = daysLeft;
    }

}

В основном классе деятельности

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    public static final String BASE_URL = "https://www.aidedtrade.com/aidedTrade_app/";
    private static Retrofit retrofit = null;

    public static Retrofit getClient() {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new
                OkHttpClient.Builder().addInterceptor(interceptor).build();

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        apiCalling();
    }

    public void apiCalling() {
        APIInterface apIinterface =
                getClient().create(APIInterface.class);
        retrofit2.Call<DaysLeft> call = apIinterface.getDaysLeft();
        Log.e("callMethod", "apiCalling: " + call);
        call.enqueue(new Callback<DaysLeft>() {
            @Override
            public void onResponse(retrofit2.Call<DaysLeft> call,
                                   Response<DaysLeft> response) {
                Splash alerts = response.body().getData();
                Log.e("DaysLeft", "onResponse: " + alerts);
                Log.e("responce", "onResponse: " +
                        response.body().getData().getUserName());
            }

            @Override
            public void onFailure(retrofit2.Call<DaysLeft> call, Throwable t) {
                Toast.makeText(getApplicationContext(), "Please Check your internet connection", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

В явном интернет-разрешении.

<uses-permission android:name="android.permission.INTERNET"/>
0 голосов
/ 09 мая 2019

ваша модель неверна Вы должны использовать два класса Один для модели данных и один для модели ответа, как показано ниже:

public class DataResponse{
     private String userName;
     pricate String days_left;

    public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getDaysLeft() {
return daysLeft;
}

public void setDaysLeft(String daysLeft) {
this.daysLeft = daysLeft;
}
}

и другие классы, такие как belew:

public calss Splash
{
   private String status;
   private DataResponse data;
   // use geter & setter for this
}

ваш интерфейс

@GET("logCheck.php?username=mhaa96")
Call<Splash> getDaysLeft();

Надеюсь быть полезным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...