我可以从活动发送截击请求并使用片段中的响应吗?

时间:2016-06-23 17:25:12

标签: android json android-fragments android-activity android-volley

我正在从活动中发送一个Volley请求。我想以两个片段访问结果。是否可能。如果可能,我如何在片段中访问这些值。我想访问一个片段中的所有text1到text6剩下的pojo数组在另一个片段中或者对于两个响应我需要从两个片段发送两个请求吗? 以下是回应

{   “text1”:“lion_1”,   “text2”:“lion_2”,   “text3”:“lion_3”,   “text4”:“lion_4”,   “text5”:“lion_5”,   “text6”:“lion_6”,   “pojo”:[     {       “medium”:“lion_1.jpe”,       “名字”:“lion_1”     },     {       “medium”:“lion_2.jpe”,       “名字”:“lion_2”     },     {       “medium”:“lion_3.jpe”,       “名字”:“lion_3”     },     {       “medium”:“lion_4.jpe”,       “名字”:“lion_4”     },     {       “medium”:“lion_5.jpe”,       “名字”:“lion_5”     },     {       “medium”:“lion_6.jpe”,       “名字”:“lion_6”     }   ] }

3 个答案:

答案 0 :(得分:0)

是的,你可以这样做。

以下是您如何从主要活动传达回复的信息。

<强> MainActivity

public class MainActivity extends AppCompatActivity {
    FragOne fragOne;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...

        fragOne = new FragOne();
        //add fragment


    }

    void onResponse(String response){
        fragOne.getNetworkResponse(response);
    }
}

<强>片段

class FragOne extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        ...
    }

    public void getNetworkResponse(string responce){
        //process response here.
    }
}

答案 1 :(得分:0)

是的,这是可能的。首先,您需要在后台解析Json响应并将其保存在活动中。完成Web调用和解析后,通知有关新数据的片段。您可以创建一些接口来通过片段获取特定数据,并在活动中实现它。每个片段都会将活动转换为该接口并获取所需的数据(如果有的话)。要告诉片段可以获得新数据,您可以创建接口并在新数据中实现它,或者每次只创建新的片段实例并从活动中获取数据

答案 2 :(得分:0)

这里的答案总是等待请求完成,然后继续到片段,并耦合活动和片段

然而,我会将活动与片段分离。

IMO我想在任何地方向队列添加请求,并在任何地方接收响应,而无需知道自己的位置或传递数据。使用RxJava实现此目的的一种方法,并根据请求标记观察响应。

我已经基于Volley创建了一个库jus,您可以在其中插入RxJava并轻松实现此行为:

在一个片段中:

//Calls the API (adds requests to the queue)     
MyJus.intructablesApi().list(20,0, Instructables.SORT_RECENT,"id");
//starts the other fragment
frag = InstructablesListFragment.newInstance();
fragmentManager.beginTransaction()
            .replace(R.id.container, frag)
            .commit();

在另一个片段中:

     RecyclerAdapter recyclerAdapter = new RxAdapter(
MyJus.hub().get(REQ_LIST).map(o -> ((ResultEvent) o).response));

集线器收集所有请求的所有响应,并按概念排列。

您可以查看完整示例in github