简体   繁体   中英

How to GET data to spinner from API with Retrofit2?

My project include spinner . It must GET data and put data to inside of this spinner . But it don't do this successfully. It shows null in the debug. I tried few different codes that I post already in my code as comment to show you.

Edit: I added JSON response, SendMessageGetDataModel and Logcat .

SendMessagePage.java

public class SendMessagePage extends BaseActivity {
    Spinner spinnerCategory;
    private SendMessageGetModel sendMessageGetModel;
    private ArrayList<SendMessageGetDataModel> category = new ArrayList<>();


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

        getCategory();
        spinnerCategory = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_text);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerCategory.setAdapter(adapter);
    }

    protected void getCategory() {
        startProgress();
        String auth = SessionHelper.getCustomerTokenWithBearer();
        Call<SendMessageGetModel> call = ApiService.apiInterface.getCategory(auth);

        call.enqueue((new Callback<SendMessageGetModel>() {
            @Override
            public void onResponse(Call<SendMessageGetModel> call, Response<SendMessageGetModel> response) {
                stopProgress();

                if (response.isSuccessful()) {

                      /*  if (response.body().getData() != null){
    //                        safeBehaviourDetailDataModel = response.body().getData().get(0);
                           // sendMessageModel = response.body().getData.get(0);
                            title = response.body().getData();
                            spinnerCategory.getAdapter(title);
    */
                    //   }

                      /*  if (response.body() != null && response.body().getData().size() > 0){
                            category.addAll(response.body().getData());

                        }*/
                    if (response.body() != null) {

                        sendMessageGetModel = response.body();
                        Log.e("", "sendMessageGetModel");

                        category = sendMessageGetModel.getData();
                        spinnerCategory.getAdapter();

                    }
                }
            }

            @Override
            public void onFailure(Call<SendMessageGetModel> call, Throwable t) {

            }
        }));
    }
}

SendMessageGetDataModel.java

    public class SendMessageGetDataModel {
    private String Title;
    private String Id;

    public String getTitle() {
        if (Title == null) {
            Title = "";
        }
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getId() {
        if (Id == null) {
            Id = "";
        }
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }
}

Json Response

{
    "Data": [
        {
            "Title": "Deneme",
            "Id": 1
        }
    ],
    "IsSuccess": true,
    "Error": null,
    "Header": null
}

Error

06-18 09:41:45.351 19642-19651/? I/art: Background sticky concurrent mark sweep GC freed 21567(2MB) AllocSpace objects, 2(136KB) LOS objects, 5% free, 19MB/20MB, paused 5.386ms total 38.828ms
06-18 09:43:25.344 19642-19651/? I/art: Background sticky concurrent mark sweep GC freed 17908(1861KB) AllocSpace objects, 2(136KB) LOS objects, 5% free, 19MB/20MB, paused 5.780ms total 47.486ms
06-18 09:43:45.440 19642-19651/? I/art: Background partial concurrent mark sweep GC freed 33296(4MB) AllocSpace objects, 60(1296KB) LOS objects, 19% free, 16MB/20MB, paused 3.507ms total 128.808ms
06-18 09:45:19.816 13495-24930/? I/EventLogChimeraService: Aggregate from 1529313490974 (log), 1529313490974 (data)
06-18 09:45:20.174 13495-24934/? I/vgd: com.google.android.gms.security__nonwearable-SnetDropBoxIntentOperation -- metadata{ service_id: 0 }
06-18 09:46:11.570 13509-19182/? E/WakeLock: release without a matched acquire!
06-18 09:46:11.673 13509-13555/? I/oqs: 51-GetConfigurationSnapshotOperationCall -- metadata{ service_id: 0 }
06-18 09:46:11.685 13509-13555/? I/oqs: 51-CommitToConfigurationOperationCall -- metadata{ service_id: 0 }
06-18 09:46:12.005 13509-24956/? W/Conscrypt: Could not set socket write timeout: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.google.android.gms.org.conscrypt.Platform.setSocketWriteTimeout(:com.google.android.gms@12685026@12.6.85 (040700-197041431):13)
    Caused by: android.system.ErrnoException: setsockopt failed: EBADF (Bad file descriptor)
        at libcore.io.Posix.setsockoptTimeval(Native Method)
        at libcore.io.ForwardingOs.setsockoptTimeval(ForwardingOs.java:157)
06-18 09:46:12.163 13509-24956/? W/Conscrypt: Could not set socket write timeout: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.google.android.gms.org.conscrypt.Platform.setSocketWriteTimeout(:com.google.android.gms@12685026@12.6.85 (040700-197041431):13)
    Caused by: android.system.ErrnoException: setsockopt failed: EBADF (Bad file descriptor)
06-18 09:46:12.164 13509-24956/? W/Conscrypt:     at libcore.io.Posix.setsockoptTimeval(Native Method)
        at libcore.io.ForwardingOs.setsockoptTimeval(ForwardingOs.java:157)
06-18 09:46:14.583 24961-24961/? W/art: Unexpected CPU variant for X86 using defaults: x86
06-18 09:46:14.591 19642-5074/? I/ActivityManager: Start proc 24961:com.google.android.talk/u0a56 for service com.google.android.talk/com.google.android.apps.hangouts.concurrent.impl.GcmTriggeredNotifier
06-18 09:46:14.853 24961-24961/? I/Babel_telephony: TeleModule.onApplicationCreate
06-18 09:46:14.857 24961-24983/? I/Babel_SMS: MmsConfig: mnc/mcc: 310/260
06-18 09:46:14.859 24961-24983/? I/Babel_SMS: MmsConfig.loadMmsSettings
06-18 09:46:14.864 24961-24983/? I/Babel_SMS: MmsConfig.loadDeviceMmsSettings from API: userAgent=GoldfishNexus, uaProfUrl=http://gsm.lge.com/html/gsm/Nexus5-M3.xml
    MmsConfig.loadFromDatabase
06-18 09:46:14.864 24961-24961/? I/Babel_App: Startup - clean
06-18 09:46:14.890 24961-24983/? E/SQLiteLog: (1) no such table: mmsconfig
06-18 09:46:14.891 24961-24983/? I/Babel_SMS: MmsConfig: no mmsconfig table android.database.sqlite.SQLiteException: no such table: mmsconfig (code 1): , while compiling: SELECT key, value, type FROM mmsconfig WHERE numeric=?
    MmsConfig.loadFromResources
06-18 09:46:14.894 24961-24983/? E/Babel_SMS: canonicalizeMccMnc: invalid mccmnc nullnull
06-18 09:46:14.894 24961-24983/? W/Babel_SMS: MmsConfig: invalid key=userAgent or type=string
    MmsConfig: invalid key=uaProfUrl or type=string
06-18 09:46:14.894 24961-24983/? I/Babel_SMS: MmsConfig.loadMmsSettings: userAgent=GoldfishNexus, uaProfUrl=http://gsm.lge.com/html/gsm/Nexus5-M3.xml
06-18 09:46:14.933 24961-24961/? D/Babel_SmsDep: disabled
06-18 09:46:14.937 24961-24961/? D/Babel_SmsDepStand: count:3
06-18 09:46:14.942 24961-24961/? D/Babel_SmsDep: disabled
06-18 09:46:14.990 24961-24961/? I/Babel_ConcService: Binding ConcurrentService
06-18 09:46:15.071 24961-24992/? I/Babel_ConcService: Scheduling delay with GcmNetworkManager of 101506 s for task geyaccount_reg_renewal_263362168_4 and tag network_connectivity_wakeup:persisted
06-18 09:46:15.086 24961-24992/? I/Babel_ConcService: Scheduling delay with GcmNetworkManager of 82799 s for task ghqDB_CLEANUP_401102596_4 and tag :persisted
06-18 09:46:15.092 24961-24994/? I/Babel_ConcService: Acquired partial wake lock to keep ConcurrentService alive
06-18 09:46:15.096 24961-24994/? I/Babel_ConcService: Released partial wake lock as ConcurrentService became idle
06-18 09:46:15.101 24961-24997/? I/Babel_ConcService: Acquired partial wake lock to keep ConcurrentService alive
06-18 09:46:15.103 13509-13520/? E/NetworkScheduler.ATC: Received callback from client for task that is already complete. ComponentInfo{com.google.android.talk/com.google.android.apps.hangouts.concurrent.impl.GcmTriggeredNotifier} :persisted
06-18 09:46:15.132 24961-25000/? D/Babel_SmsDepStand: count:3
06-18 09:46:15.132 24961-25000/? D/Babel_SmsDepNotif: not sms
06-18 09:46:15.132 24961-25000/? D/Babel_SmsDepUtil: imp:-1:3686
06-18 09:46:15.137 24961-25000/? I/Babel: Invalid account: 0 isEmptyName: true nameEqualsGaiaId: false
    Invalid account: 1 isEmptyName: true nameEqualsGaiaId: false
06-18 09:46:15.153 24961-25003/? I/Babel: Deleting: false for 0
06-18 09:46:15.154 24961-25003/? I/Babel: Deleting: false for 1
06-18 09:46:15.165 24961-25002/? D/Babel_SmsDep: disabled
06-18 09:46:15.184 24961-25000/? D/Babel_Notif_Persistent: PersistentMessageNotifier.cancelOngoingNotification
06-18 09:46:15.185 24961-25000/? D/Babel_Notif_SMS: cancelOngoingNotification
06-18 09:46:15.195 24961-25000/? I/Babel_ConcService: Released partial wake lock as ConcurrentService became idle

Try this solution:-

1)First call getCategory() after declaring spinner ID

spinnerCategory = (Spinner) findViewById(R.id.spinner);
getCategory();

2)Use this Response class instead of SendMessageGetDataModel

public class ResponseClass {

public boolean isResult() {
    return result;
}

public void setResult(boolean result) {
    this.result = result;
}


@SerializedName("IsSuccess")
private boolean result;

public String getError() {
    return Error;
}

public void setError(String error) {
    Error = error;
}

public String getHeader() {
    return Header;
}

public void setHeader(String header) {
    Header = header;
}

@SerializedName("Error")
private String Error;


@SerializedName("Header")
private String Header;


public ArrayList<SpinnerModalClass> getSpinnerModalClassArrayList() {
    return spinnerModalClassArrayList;
}

public void setSpinnerModalClassArrayList(ArrayList<SpinnerModalClass> couponsListingModalArrayList) {
    this.spinnerModalClassArrayList = couponsListingModalArrayList;
}

@SerializedName("Data")
private ArrayList<SpinnerModalClass> spinnerModalClassArrayList;

public class SpinnerModalClass {
    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    @SerializedName("Title")
    private String Title;

    @SerializedName("Id")
    private String Id;



}

} 3)Declare this arraylist only

private ArrayList<ResponseClass.SpinnerModalClass> spinnerArrayList = new ArrayList<>();

4)Then in onResponse

                   if (response.body() !=null){
                        spinnerArrayList =response.body().getSpinnerModalClassArrayList();  
                        // set adapter for spinner using this arraylist

                      } 

5)Also check this method in API interface class if its correct of not , like path getCategory

6)Use custom adapter for spinner

And use this

Call<ResponseClass> call = ApiService.apiInterface.getCategory(auth);

Change the usage everywhere

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