Установить данные на счетчик и отправить ключ выбранных данных в счетчик - PullRequest
0 голосов
/ 18 февраля 2019

Я получаю список языков с сервера, используя rest api в Android, используя модификацию.Я должен отправить ключ / идентификатор выбранного элемента в счетчик.Это данные Json.

[
  {
    "key": "ab",
    "language": "Abkhazian"
  },
  {
    "key": "aa",
    "language": "Afar"
  },
  {
    "key": "zu",
    "language": "Zulu"
  }]

Я получаю данные языков в счетчике ... вот так ...

 Call<List<LanguageListing>> call = RetrofitClient.getInstance().getApi().getLanguages();
        call.enqueue(new Callback<List<LanguageListing>>() {
            @Override
            public void onResponse(Call<List<LanguageListing>> call, Response<List<LanguageListing>> response) {
                List<LanguageListing> languages =response.body();
                for (LanguageListing C:languages){
                    Log.d("Languages" , C.getLanguage() );
                    String[] languageName = new String[languages.size()];
                    for (int i=0 ; i<languages.size() ; i++){
                        languageName[i]= languages.get(i).getLanguage();
                    }
                    lan_spinner.setAdapter(new ArrayAdapter<String>(
                            getApplicationContext(),
                            R.layout.items_view,
                            languageName
                    ));
                }
            }
            @Override
            public void onFailure(Call<List<LanguageListing>> call, Throwable t) {
                Toast.makeText(Profile_Activity.this , t.getMessage() , Toast.LENGTH_SHORT).show();
            }
        });

, когда мне нужно обновить языкимне нужно отправить ключ на сервер, но я не могу получить ключ здесь ...

key = lan_spinner.getSelectedItem().toString();

из этой строки я просто могу получить название языка.пожалуйста, помогите с примером кода спасибо.

вот код, где мне нужно обновить язык ..

 public void UpdateLanguage(){

        user_id = DatabaseUtil.getInstance().getUser().getData().getID();
        key = lan_spinner.getSelectedItem().toString();
        mRegProgress.setTitle("Updating Language");
        mRegProgress.setMessage("Please wait...");
        mRegProgress.setCanceledOnTouchOutside(false);
        mRegProgress.show();
        Call<ResponseBody> update_lan = RetrofitClient.getInstance().getApi().updateLanguage(user_id , key);
        update_lan.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                mRegProgress.dismiss();
                String s  = response.body().toString();
                Toast.makeText(Profile_Activity.this , "Language Updated Successfully" , Toast.LENGTH_LONG).show(); }
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Toast.makeText(Profile_Activity.this ,  "There is some Error in updating your languages..." , Toast.LENGTH_SHORT).show();
            }
        });
    }

Это мой класс модели ...

public class LanguageListing {
    @SerializedName("key")
    @Expose
    private String key;
    @SerializedName("language")
    @Expose
    private String language;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }
}

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

LanguageListing ваше имя класса модели внутри этого определяет два поля имя ключа и имя языка.Вы наносите setOnItemSelectedListener на спиннер.

spinn.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {


                String keyNameStr = (yourlist.get(i).getKeyName());

            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

, пожалуйста, попробуйте, это поможет вам.

0 голосов
/ 18 февраля 2019

Попробуйте это

ArrayList<LanguageListing > arrayList;
ArrayAdapter<LanguageListing> adapter;

 call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        if (response != null) {
            if (response.code() == 200) {
                try {
                    String responseValue = response.body().string();
                    if (responseValue.length() > 0) {
                        JSONArray jsonArray = new JSONArray(responseValue);
                        if (jsonArray != null) {
                            for (int i = 0; i < jsonArray.length(); i++) {                                                  
                                LanguageListing obj = new LanguageListing ();
                                obj.setKey(jsonArray.getJSONObject(i).getString("key"));
                                obj.setLanguage(jsonArray.getJSONObject(i).getString("language"));
                                arrayList.add(obj);
                            }
                            adapter = new ArrayAdapter<LanguageListing>(this, android.R.layout.simple_spinner_item, list);
                            adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
                            spinner.setAdapter(adapter);
                        }
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
    }
});

Вы можете получить ключ selectedItem языка от spinner, как показано ниже.

@OnItemSelected({R.id.yourSpinner})
public void spinnerItemSelected(Spinner spinner, int position) {
switch (spinner.getId()) {
    case R.id.yourSpinner:
        LanguageListing  langKeyvalue = (LanguageListing ) yourSpinner.getSelectedItem();
        String key = langKeyvalue.getKey(); //here you will get selectedItem key
        String language = langKeyvalue.getLanguage();
        break;
        }
}
0 голосов
/ 18 февраля 2019

Получите выбранный элемент из прядильщика, используя spinner.getSelectedItem() и сохраните его в переменной, скажем selectedString, которую вы уже извлекаете в своем коде.

Проверьте ваш основной список на наличие строки.Если есть строка, вы также можете получить ее идентификатор.

for(LanguageListing e : datalist) {
   if (e.getLanguage().contains(selectedString)) {
       String sel_id = e.getKey();
       break;
   }
}
...