1

사용자가 적어도 3 단계로 주문을 완료 할 수있는 온라인 주문 시스템이 있습니다. 내가 한 일을 AsyncTask를 통해 첫 번째 활동에서 세 번째 활동으로의 값 전달

  • 가 시작 날짜를 단계 이제 1
  • 에서 선택한 계획에 따라

  • 선택 내용을 선택 계획의

    1. 만들기 선택 : 아래의 각 단계는 별도의 활동이다 1 단계에서 사용자가 계획 및 주문을 클릭하면 코드 아래에서 onClick이 실행됩니다. 두 번째 활동에서
      Intent intent = new Intent(context, SelectDate.class); 
      
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      
      Bundle extras = new Bundle(); 
      
      extras.putString("pass_selected_meal_plan_id",mp_id_pass); 
      extras.putString("pass_selected_meal_name",mp_name_display); 
      
      intent.putExtras(extras); 
      
      context.startActivity(intent); 
      
      Toast.makeText(context, mp_name_display+" Selected", 
      Toast.LENGTH_SHORT).show(); 
      

      없음

      , 내가 주문 시작 날짜를 선택하도록 요구하고있다. 그것은 또한 간단하고 충분히 문제가되지 않습니다. 그러나 세 번째 활동으로 전환하려고 할 때 문제가 시작됩니다.

      세 번째 활동 내용은 첫 번째 활동에서 선택한 계획에 따라 다르므로 선택한 ID를 세 번째 활동으로 전송해야합니다. 나는 엑스트라 번들에서 "pass_selected_meal_plan_id"로 두 번째 활동을했습니다.

      세 번째 활동을로드하는 방법도 중요합니다. 세 번째 활동을 시작하는 방법에는 두 가지가 있습니다. 첫 번째 버튼은 onClick을 다음 버튼에 놓으면 매우 간단합니다. 필요한 선택을 전송하는 것이 매우 간단하다고 가정합니다. 그러나이 경우 Android App Development의 초보자라는 것을 알고있는 한, 선택한 계획에 따라 콘텐츠를 클릭하고로드 할 수있는 버튼을 제공해야합니다.

      두 번째 방법은 내가 사용하고자하는 것입니다. 두 번째 작업 onClick Next에서 AsyncTask를 실행하고 있습니다. 그것은 완벽하게 작동합니다. 유일한 것은 이전 액티비티, 즉 첫 번째 액티비티에서 onPostExecute에서 엑스트라를 가져올 수 없다는 것입니다.

      전 세계 변수를 사용하는 경우에도 열려 있지만 수행 방법은 모르겠습니다. 글로벌 변수가 무엇인지 아는 대신, 나는 그 대신에 그들을 사용하기를 열망하지 않는다. 사람이 도울 수 있다면

      @Override 
      protected void onPostExecute(String result) { 
          Intent intent = new Intent(ctx, SelectMeals.class); 
      
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      
          Bundle extras = new Bundle(); 
      
          //Instead of "1" I want the value from previous Activity, which already available in Extras from previous Activity 
          extras.putString("pass_selected_meal_plan_id", "1"); 
      
          //This is the second value I want to be transferred from first activity to the third activity 
          extras.putString("pass_selected_meal_name","Test"); 
      
          intent.putExtras(extras); 
      
          ctx.startActivity(intent); 
      } 
      

      정말 감사합니다 :

      여기 내 onPostExecute 코드입니다.

  • +0

    두 번째 활동에는 첫 번째 활동에서 제공된 번들로 표시된 ID가 있습니다. 실제로 너를 다시 잡고 있는게 뭐야? 번들 밖으로 ID를 얻을 수 없습니까? – fluffyBatman

    +0

    빠른 응답을 부탁드립니다. 문제는 거기에 정의 된 다음 활동에 대한 추가 기능으로 onPostExecute에서 값을 가져올 수 없다는 것입니다. AsyncTask없이 전송하면 완벽하게 작동합니다. 즉,이 문제의 해결책은 이전 활동의 getExtras를 onPostExecute의 puExtras에 할당하는 것입니다. –

    답변

    2

    당신은, 당신의 AsyncTask를 지금의 onCreate

    Bundle bundle = getIntent().getExtras(); 
    
    //Extract the data… 
    id = bundle.getString("pass_selected_meal_plan_id"); 
    name = bundle.getString("pass_selected_meal_name"); 
    

    내에서 두 번째 활동에서

    코드

    아래 코드 아래

    // declare global variables 
    
    String id; 
    String name; 
    

    사용을 사용하여 3 활동을 시작하기 전에 아래의 코드를 작성할 수 있습니다.

    @Override 
    protected void onPostExecute(String result) { 
        Intent intent = new Intent(ctx, SelectMeals.class); 
    
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    
        Bundle extras = new Bundle();   
        extras.putString("pass_selected_meal_plan_id",id); // first activity data 
        extras.putString("pass_selected_meal_name",name); // first activity data 
        intent.putExtras(extras); 
    
        ctx.startActivity(intent); 
    } 
    

    마지막으로 세 번째 활동에서이 값을 얻을 수 있습니다.

    중요한 강조점은 일반적인 변수 이름을 사용하지 않는 것입니다. 신분증. 그것은이 답변에서 참고 용으로 만 사용되었지만 좋은 생각은 아닙니다. Refactor> Rename을 사용하면 분명히 직면 할 수있는 한 가지 문제가 있습니다. XML 파일의 @ + id도 변경됩니다.

    +0

    빠른 응답을 보내 주셔서 감사합니다. 나는 이것이 효과가있을 것 같은 느낌이 든다. 지침이 필요한 유일한 방법은 전역 변수를 선언하는 것입니다. 사실 저는 그것에 익숙하지 않으므로 지침이 필요합니다. 다시 한번 감사드립니다 ... –

    +0

    오빠 고맙습니다. 정말 도움이되었습니다. 전역 변수도 알아 냈습니다. 정말 고마워요 ... –

    +0

    오신 것을 환영합니다 –

    관련 문제