{"id":1062,"date":"2019-02-15T11:57:46","date_gmt":"2019-02-15T02:57:46","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=1062"},"modified":"2019-06-05T08:38:56","modified_gmt":"2019-06-04T23:38:56","slug":"%ed%94%84%eb%a0%88%ea%b7%b8%eb%a8%bc%ed%8a%b8%ea%b0%84-%ed%86%b5%ec%8b%a0%ed%95%98%eb%8a%94-3%ea%b0%80%ec%a7%80-%eb%b0%a9%eb%b2%95","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=1062","title":{"rendered":"\ud504\ub808\uadf8\uba3c\ud2b8\uac04 \ud1b5\uc2e0\ud558\ub294 3\uac00\uc9c0 \ubc29\ubc95"},"content":{"rendered":"<h1>\ud504\ub808\uadf8\uba3c\ud2b8 \ud1b5\uc2e0(Fragment Commnication)<\/h1>\n<p itemprop=\"name\" class=\"devsite-page-title\">\uc548\ub4dc\ub85c\uc774\ub4dc \uacf5\uc2dd \ubb38\uc11c\uc778 <a href=\"https:\/\/developer.android.com\/training\/basics\/fragments\/communicating\">Communicate with other fragments<\/a>\uc5d0 \ud504\ub808\uadf8\uba3c\ud2b8\uac04 \ud1b5\uc2e0\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c\uc798 \ub098\uc640\uc788\uc9c0\ub9cc, \uc800\ub294 \ub610 \ub2e4\ub978 \ubc29\ubc95\ub4e4\uc5d0\ub300\ud574\uc11c \uc124\uba85\ud558\uace0\uc790 \ud569\ub2c8\ub2e4.<\/p>\n<h2 itemprop=\"name\">AAC ViewModel \uc774\uc6a9<\/h2>\n<p><a href=\"https:\/\/www.charlezz.com\/?p=365\">ViewModel<\/a>\uc744 \uc774\uc6a9\ud558\uba74 Activity\ub97c \ub77c\uc774\ud50c\uc2f8\uc774\ud074 \uc624\ub108\ub85c \ub4f1\ub85d\ud558\uc5ec \uacf5\ud1b5\ub41c \ubdf0\ubaa8\ub378\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0<\/p>\n<p>app\ub808\ubca8\uc758\u00a0 build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc758\uc874\uc131\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">\/\/LiveData and ViewModel\r\ndef lifecycle_version = \"1.1.1\"\r\nimplementation \"android.arch.lifecycle:extensions:$lifecycle_version\"<\/pre>\n<p>\uc758\uc874\uc131\uc774 \ucd94\uac00\ub418\uc5c8\ub2e4\uba74 ViewModel \ud074\ub798\uc2a4\ub97c \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class SharedViewModel extends ViewModel {\r\n\r\n    private MutableLiveData&lt;String&gt; liveText = new MutableLiveData&lt;&gt;();\r\n\r\n    public LiveData&lt;String&gt; getText(){\r\n        return liveText;\r\n    }\r\n\r\n    public void setText(String text){\r\n        liveText.setValue(text);\r\n    }\r\n\r\n}\r\n<\/pre>\n<p>FragmentB\uc5d0\uc11c FragmentA\ub85c text\ub97c \uc804\ub2ec\ud558\uae30 \uc704\ud574\uc11c, \uc800\ub294 ViewModel\uc5d0 \uc635\uc800\ubc84\ube14 \uac1d\uccb4\ub85c <a href=\"https:\/\/www.charlezz.com\/?p=363\">LiveData<\/a>\ub97c \uc120\ud0dd\ud588\uc9c0\ub9cc \ub2e4\ub978 \ub370\uc774\ud130\ud0c0\uc785\uc744 \uc120\ud0dd\ud558\uc154\ub3c4 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class FragmentB extends Fragment {\r\n\r\n    private SharedViewModel sharedViewModel;\r\n    private EditText editText;\r\n\r\n    @Nullable\r\n    @Override\r\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n        View view = inflater.inflate(R.layout.fragment_b, container, false);\r\n        editText = view.findViewById(R.id.input);\r\n        return view;\r\n    }\r\n\r\n    @Override\r\n    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {\r\n        super.onViewCreated(view, savedInstanceState);\r\n        editText.addTextChangedListener(new TextWatcher() {\r\n            @Override\r\n            public void beforeTextChanged(CharSequence s, int start, int count, int after) {\r\n\r\n            }\r\n\r\n            @Override\r\n            public void onTextChanged(CharSequence s, int start, int before, int count) {\r\n\r\n            }\r\n\r\n            @Override\r\n            public void afterTextChanged(Editable s) {\r\n                if(sharedViewModel!=null){\r\n                    sharedViewModel.setText(s.toString());\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    @Override\r\n    public void onActivityCreated(@Nullable Bundle savedInstanceState) {\r\n        super.onActivityCreated(savedInstanceState);\r\n        sharedViewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);\r\n    }\r\n}<\/pre>\n<p>FragmentA \uc5d0\uc11c\ub294 FragmentB\uac00 \uc785\ub825\ud55c \ub370\uc774\ud130\ub97c \ubc1b\uc544\uc11c TextView\ub97c \uac31\uc2e0 \ud560 \uac81\ub2c8\ub2e4.<br \/>\nActivity\ub97c \uc624\ub108\ub85c \ub4f1\ub85d\ud558\uae30 \uc704\ud574 Activity\uc0dd\uc131 \uc9c0\uc810\uc778 onActivityCreated\uc5d0\uc11c sharedViewModel \uc778\uc2a4\ud134\uc2a4\ub97c \uc5bb\uc2b5\ub2c8\ub2e4.<br \/>\n\ubdf0\ubaa8\ub378\uc744 \ud1b5\ud574 LiveData&lt;String&gt;\ud0c0\uc785\uc778 \ud14d\uc2a4\ud2b8\ub97c \uc5bb\uc5b4 observe\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public class FragmentA extends Fragment {\r\n    private SharedViewModel sharedViewModel;\r\n    private TextView textView;\r\n\r\n    @Nullable\r\n    @Override\r\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n        View view = inflater.inflate(R.layout.fragment_a, container, false);\r\n        textView = view.findViewById(R.id.input);\r\n        return view;\r\n    }\r\n\r\n    @Override\r\n    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {\r\n        super.onViewCreated(view, savedInstanceState);\r\n    }\r\n\r\n    @Override\r\n    public void onActivityCreated(@Nullable Bundle savedInstanceState) {\r\n        super.onActivityCreated(savedInstanceState);\r\n        sharedViewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);\r\n        sharedViewModel.getText().observe(this, new Observer&lt;String&gt;() {\r\n            @Override\r\n            public void onChanged(@Nullable String s) {\r\n                textView.setText(s);\r\n            }\r\n        });\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>FragmentB\ub294 SharedViewModel\uc744 \uc5bb\uc5b4 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud560 \uc900\ube44\ub97c \ud569\ub2c8\ub2e4. EditText\uc758 TextWatcher\ub97c \ubd99\uc5ec\uc11c \ud14d\uc2a4\ud2b8\uac00 \uc785\ub825\ub418\ub294\uac83\uc744 \uac10\uc9c0\ud558\uace0,\u00a0\ubcc0\uacbd\ub41c \uac12\uc744\u00a0SharedViewModel\uc5d0 \uc788\ub294 LiveData\uc5d0 \ubc1c\ud589\ud569\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=1063\" rel=\"attachment wp-att-1063\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/Screenshot_1550198694-576x1024.png\" alt=\"\" width=\"576\" height=\"1024\" class=\"aligncenter size-large wp-image-1063\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/Screenshot_1550198694-576x1024.png 576w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/Screenshot_1550198694-169x300.png 169w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/Screenshot_1550198694-768x1365.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2019\/02\/Screenshot_1550198694.png 1080w\" sizes=\"(max-width: 576px) 100vw, 576px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Interface \uc774\uc6a9\ud55c \ub9ac\uc2a4\ub108 \uad6c\ud604<\/h2>\n<p>\uacf5\uc2dd\ubb38\uc11c\uc5d0 \ub098\uc640\uc788\ub294 \ud328\ud134\uc785\ub2c8\ub2e4.\u00a0<\/p>\n<p>\uc778\ud130\ud398\uc774\uc2a4 \ud558\ub098\uc640 onTextChagne\ub77c\ub294 \uba54\uc18c\ub4dc\ub97c \uc120\uc5b8\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public interface FragmentListener {\r\n    void onTextChange(String s);\r\n}\r\n<\/pre>\n<p>FragmentB2\uc5d0\uc11c \ud14d\uc2a4\ud2b8\uac00 \ubcc0\uacbd \ub418\uba74 \uc774 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ub97c \ud1b5\uc9c0\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class FragmentB2 extends Fragment {\r\n\r\n    private EditText editText;\r\n    private FragmentListener fragmentListener;\r\n\r\n    @Nullable\r\n    @Override\r\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n        View view = inflater.inflate(R.layout.fragment_b, container, false);\r\n        editText = view.findViewById(R.id.input);\r\n        return view;\r\n    }\r\n\r\n    @Override\r\n    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {\r\n        super.onViewCreated(view, savedInstanceState);\r\n        editText.addTextChangedListener(new TextWatcher() {\r\n            @Override\r\n            public void beforeTextChanged(CharSequence s, int start, int count, int after) {\r\n\r\n            }\r\n\r\n            @Override\r\n            public void onTextChanged(CharSequence s, int start, int before, int count) {\r\n\r\n            }\r\n\r\n            @Override\r\n            public void afterTextChanged(Editable s) {\r\n                if(fragmentListener!=null){\r\n                    fragmentListener.onTextChange(s.toString());\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    public void setFragmentListener(FragmentListener listener){\r\n        this.fragmentListener = listener;\r\n    }\r\n\r\n    @Override\r\n    public void onActivityCreated(@Nullable Bundle savedInstanceState) {\r\n        super.onActivityCreated(savedInstanceState);\r\n        if(getActivity() instanceof FragmentListener){\r\n            this.fragmentListener = (FragmentListener) getActivity();\r\n        }\r\n    }\r\n}<\/pre>\n<p>Activity\ub97c \uc778\ud130\ud398\uc774\uc2a4 \uad6c\ud604\uccb4\ub85c \ud558\uc5ec \uac12\uc774 \ubcc0\uacbd \ub418\uc5c8\uc744 \ub54c \ub9ac\uc2a4\ub108\ub97c \ud1b5\ud574 \ub370\uc774\ud130\uc758 \ubcc0\uacbd\uc744 \ud1b5\uc9c0 \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class InterfaceExamActivity extends AppCompatActivity implements FragmentListener{\r\n\r\n    FragmentA2 fragmentA2;\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_interface_exam);\r\n        fragmentA2 = (FragmentA2) getSupportFragmentManager().findFragmentById(R.id.fragmentA);\r\n    }\r\n\r\n\r\n    @Override\r\n    public void onTextChange(String s) {\r\n        if(fragmentA2!=null){\r\n            fragmentA2.setText(s);\r\n        }\r\n    }\r\n}<\/pre>\n<p>\uc561\ud2f0\ube44\ud2f0\uc5d0\uc11c\ub294 FragmentB2\uc5d0\uc11c \ubc1b\uc740 \ub370\uc774\ud130\ub97c FragmentA2 setText\uba54\uc18c\ub4dc\ub97c \ud1b5\ud574 \uc804\ub2ec \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true \">public class FragmentA2 extends Fragment {\r\n    private TextView textView;\r\n\r\n    @Nullable\r\n    @Override\r\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n        View view = inflater.inflate(R.layout.fragment_a, container, false);\r\n        textView = view.findViewById(R.id.input);\r\n        return view;\r\n    }\r\n\r\n    public void setText(String s) {\r\n        if(textView!=null){\r\n            textView.setText(s);\r\n        }\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h2>RxJava2\ub97c \uc774\uc6a9\ud55c EventBus \ub9cc\ub4e4\uae30<\/h2>\n<pre class=\"lang:java decode:true \">public class RxEventBus {\r\n    private static final RxEventBus instance = new RxEventBus();\r\n\r\n    public static RxEventBus getInstance(){\r\n        return instance;\r\n    }\r\n\r\n    private PublishSubject&lt;Object&gt; bus = PublishSubject.create();\r\n\r\n    private RxEventBus(){\r\n    }\r\n\r\n    public void send(Object o) {\r\n        bus.onNext(o);\r\n    }\r\n\r\n    public Observable&lt;Object&gt; toObservable() {\r\n        return bus;\r\n    }\r\n\r\n<\/pre>\n<p>RxJava2\uc758 PublishSubject\ub97c \uc774\uc6a9\ud55c \uc774\ubca4\ud2b8 \ubc84\uc2a4\ub97c \ud558\ub098 \ub9cc\ub4ed\ub2c8\ub2e4. \uc800\ub294 \uc2f1\uae00\ud1a4\ud328\ud134\uc73c\ub85c \ub9cc\ub4e4\uc5c8\uc9c0\ub9cc, \uaf2d \uadf8\ub7f4\ud544\uc694\ub294 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<p>send\uba54\uc18c\ub4dc\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\uace0<br \/>\ntoObservable\uba54\uc18c\ub4dc\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ub97c \uad6c\ub3c5\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>RxJava2\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/www.charlezz.com\/?p=189\">RxJava2 \ud3ec\uc2a4\ud2b8<\/a>\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694.<\/p>\n<pre class=\"lang:java decode:true\">public class FragmentB3 extends Fragment {\r\n\r\n    private EditText editText;\r\n\r\n    @Nullable\r\n    @Override\r\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n        View view = inflater.inflate(R.layout.fragment_b, container, false);\r\n        editText = view.findViewById(R.id.input);\r\n        return view;\r\n    }\r\n\r\n    @Override\r\n    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {\r\n        super.onViewCreated(view, savedInstanceState);\r\n        editText.addTextChangedListener(new TextWatcher() {\r\n            @Override\r\n            public void beforeTextChanged(CharSequence s, int start, int count, int after) {\r\n\r\n            }\r\n\r\n            @Override\r\n            public void onTextChanged(CharSequence s, int start, int before, int count) {\r\n\r\n            }\r\n\r\n            @Override\r\n            public void afterTextChanged(Editable s) {\r\n                RxEventBus.getInstance().send(s.toString());\r\n            }\r\n        });\r\n    }\r\n}\r\n<\/pre>\n<p>FragmentB3\uc5d0\uc11c\ub294 \uc774\uc804\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c EditText\uc758 \ubcc0\ud654\ub97c \uac10\uc9c0\ud558\uc5ec RxEventBus\ub85c \ub370\uc774\ud130\ub97c \ubc1c\ud589\ud558\ub294 \ubaa8\uc2b5\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">public class FragmentA3 extends Fragment {\r\n    private TextView textView;\r\n\r\n    private CompositeDisposable disposables = new CompositeDisposable();\r\n\r\n    @Nullable\r\n    @Override\r\n    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {\r\n        View view = inflater.inflate(R.layout.fragment_a, container, false);\r\n        textView = view.findViewById(R.id.input);\r\n\r\n        Disposable disposable = RxEventBus.getInstance().toObservable().subscribe(new Consumer&lt;Object&gt;() {\r\n            @Override\r\n            public void accept(Object o) throws Exception {\r\n                textView.setText((String)o);\r\n            }\r\n        }, new Consumer&lt;Throwable&gt;() {\r\n            @Override\r\n            public void accept(Throwable throwable) throws Exception {\r\n\r\n            }\r\n        });\r\n        disposables.add(disposable);\r\n        return view;\r\n    }\r\n\r\n    @Override\r\n    public void onDestroyView() {\r\n        super.onDestroyView();\r\n        if(disposables.isDisposed()){\r\n            disposables.dispose();\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>FragmentA3\uc5d0\uc11c\ub294 \uc774\ubca4\ud2b8 \ubc84\uc2a4\uc758 \uc635\uc800\ubc84\ube14\uac1d\uccb4\ub97c \uad6c\ub3c5\ud558\uace0 \ub370\uc774\ud130\ub97c \ubc1b\uc2b5\ub2c8\ub2e4. <br \/>\nNote : RxJava\uc758 subscribe\uba54\uc18c\ub4dc\ub294 disposable\uac1d\uccb4\ub97c \ubc18\ud658\ud558\ub294\ub370, \uc774\ub97c dispose\ud558\uc9c0 \uc54a\uc73c\uba74 \uba54\ubaa8\ub9ac \ub204\uc218\ub85c \uc774\uc5b4\uc9c0\ub2c8 \uaf2d dispose\ud574\uc57c\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc608\uc81c\ub294 <a href=\"https:\/\/github.com\/Charlezz\/FragmentCommunicationExample\">github<\/a>\uc5d0\uc11c \ud655\uc778 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud504\ub808\uadf8\uba3c\ud2b8 \ud1b5\uc2e0(Fragment Commnication) \uc548\ub4dc\ub85c\uc774\ub4dc \uacf5\uc2dd \ubb38\uc11c\uc778 Communicate with other fragments\uc5d0 \ud504\ub808\uadf8\uba3c\ud2b8\uac04 \ud1b5\uc2e0\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c\uc798 \ub098\uc640\uc788\uc9c0\ub9cc, \uc800\ub294 \ub610 \ub2e4\ub978 \ubc29\ubc95\ub4e4\uc5d0\ub300\ud574\uc11c \uc124\uba85\ud558\uace0\uc790 \ud569\ub2c8\ub2e4. AAC ViewModel \uc774\uc6a9 ViewModel\uc744 \uc774\uc6a9\ud558\uba74 Activity\ub97c \ub77c\uc774\ud50c\uc2f8\uc774\ud074 \uc624\ub108\ub85c \ub4f1\ub85d\ud558\uc5ec \uacf5\ud1b5\ub41c \ubdf0\ubaa8\ub378\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0 app\ub808\ubca8\uc758\u00a0 build.gradle\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc758\uc874\uc131\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4. \/\/LiveData and ViewModel def lifecycle_version = &#8220;1.1.1&#8221; implementation &#8220;android.arch.lifecycle:extensions:$lifecycle_version&#8221; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[25,7,26],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1062"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1062"}],"version-history":[{"count":6,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1062\/revisions"}],"predecessor-version":[{"id":1334,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/1062\/revisions\/1334"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1062"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1062"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}