Как сохранить значение Intent внутри Calling API? - PullRequest
2 голосов
/ 27 января 2020

У меня проблема с сохранением значения в Intent из вызывающего API, вызывающий API показывает его значение, но я не могу сохранить его в намерении. это мой код, сохраняющий в намерениях

view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final Intent mIntent = new Intent(view.getContext(), KelasOnlineActivity.class);
            mIntent.putExtra("link",kelas.get(position).getUrl());
            sharedPrefKelas.saveSPString(SharedPrefKelas.SP_ID_Kelas, "");
            Call<Kelas> result = mApiInterface.KelasCall(kelas.get(position).getUrl(), sharedPrefManager.getSpIdMember(), sharedPrefManager.getSpLevelMember(), sharedPrefManager.getSpToken());
            result.enqueue(new Callback<Kelas>() {
                @Override
                public void onResponse(Call<Kelas> call, Response<Kelas> response) {
                    if (response.isSuccessful()) {
                        Kelas mkelas = response.body();
                        Log.d("data", "Nyoba Status Kelas: " + mkelas.statuschat);
                        mIntent.putExtra("Status",mkelas.statuschat);


                    } else {
                        Log.i("debug", "cekdata: GA BERHASIL");
                    }
                }

                @Override
                public void onFailure(Call<Kelas> call, Throwable t) {
                    Log.e("debug", "onFailure: ERROR > " + t.getMessage());

                }
            });

            mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            view.getContext().startActivity(mIntent);

enter image description here

Получение намерения

    Intent intent;
    intent = getActivity().getIntent();
    url= intent.getStringExtra("link");
    status = intent.getStringExtra("Status");

    Toast.makeText(getActivity(), url+status, Toast.LENGTH_LONG).show();

я могу отображать URL в тосте, но не статус, статус показывает ноль, Это картина проблемы enter image description here

Кто-нибудь может мне помочь? Я благодарен, если кто-нибудь может решить мою проблему

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Вы звоните startActivity за пределами onResponse обратного вызова: таким образом, он обязательно вызовет новое действие перед onResponse и обязательно перед событием сохранения состояния.

view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final Intent mIntent = new Intent(view.getContext(), KelasOnlineActivity.class);
            mIntent.putExtra("link",kelas.get(position).getUrl());  //This is outside of onResponse, so it's added correctly
            sharedPrefKelas.saveSPString(SharedPrefKelas.SP_ID_Kelas, "");
            Call<Kelas> result = mApiInterface.KelasCall(kelas.get(position).getUrl(), sharedPrefManager.getSpIdMember(), sharedPrefManager.getSpLevelMember(), sharedPrefManager.getSpToken());
            result.enqueue(new Callback<Kelas>() {
                @Override
                public void onResponse(Call<Kelas> call, Response<Kelas> response) {
                    if (response.isSuccessful()) {
                        Kelas mkelas = response.body();
                        Log.d("data", "Nyoba Status Kelas: " + mkelas.statuschat);
                        mIntent.putExtra("Status",mkelas.statuschat);

                        //You should put them here
                        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                        view.getContext().startActivity(mIntent);

                    } else {
                        Log.i("debug", "cekdata: GA BERHASIL");
                    }
                }

                @Override
                public void onFailure(Call<Kelas> call, Throwable t) {
                    Log.e("debug", "onFailure: ERROR > " + t.getMessage());

                }
            });

            //And not here
            //mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            //view.getContext().startActivity(mIntent);
1 голос
/ 27 января 2020

Попробуйте

private String tmp = "";
view.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
     final Intent mIntent = new Intent(view.getContext(), KelasOnlineActivity.class);
     mIntent.putExtra("link",kelas.get(position).getUrl());
     sharedPrefKelas.saveSPString(SharedPrefKelas.SP_ID_Kelas, "");
     Call<Kelas> result = mApiInterface.KelasCall(kelas.get(position).getUrl(), sharedPrefManager.getSpIdMember(), sharedPrefManager.getSpLevelMember(), sharedPrefManager.getSpToken());

     result.enqueue(new Callback<Kelas>() {
         @Override
         public void onResponse(Call<Kelas> call, Response<Kelas> response) {
              if (response.isSuccessful()) {
                  Kelas mkelas = response.body();
                  Log.d("data", "Nyoba Status Kelas: " + mkelas.statuschat);
                  tmp = mkelas.statuschat;
               } else {
                  Log.i("debug", "cekdata: GA BERHASIL");
               }
          }

          @Override
          public void onFailure(Call<Kelas> call, Throwable t) {
                Log.e("debug", "onFailure: ERROR > " + t.getMessage());
          }
            });

      mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      mIntent.putExtra("Status", tmp);
      view.getContext().startActivity(mIntent);
...