android - 在 Activity 开始选项卡上在 android 中发送服务器请求?

标签 android

我有添加两个选项卡的 MainActivity,即“A”、“B”,这两个选项卡都向服务器选项卡发送一些请求,“A”是一个 fragment ,选项卡“B”也是一个 fragment ,问题是当 MainActivity 启动两个选项卡时发送服务器请求,默认情况下 tab1 对用户可见,但当 tab 2 可见时我想要什么,然后 tab2 向服务器发送请求。请帮助我。

主要 Activity 代码:-

    m_TabLayout = (TabLayout) findViewById(R.id.tab_layout);// finding Id of tablayout
    m_ViewPager = (ViewPager) findViewById(R.id.pager);//finding Id of ViewPager
    m_TabLayout.addTab(m_TabLayout.newTab().setText("Deals"));// add deal listin tab
    m_TabLayout.addTab(m_TabLayout.newTab().setText("Stories"));
    m_TabLayout.setTabGravity(TabLayout.GRAVITY_FILL);// setting Gravity of Tab


    CDealMainListingPager m_oDealMainScreenPager = new CDealMainListingPager(getSupportFragmentManager(), m_TabLayout.getTabCount());
    m_ViewPager.setAdapter(m_oDealMainScreenPager);// adiing adapter to ViewPager
    m_ViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(m_TabLayout));// performing action of page changing
    m_TabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            m_ViewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });

tab2代码:-

    private View m_Main;

private String m_szMobileNumber, m_szEncryptedPassword;
private CAdscenMediaDealStorage m_Item;
private static ListView m_ListView;// declaring Listview variable..
private String TAG = CAdscendMediaDeal.class.getSimpleName();
Integer pubId = 105639;
Integer aswallId = 6453;
private ArrayList<CAdscenMediaDealStorage> s_oDataset;// declaring Arraylist variable
private CADscendDealAdapter m_oAdapter;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    m_Main = inflater.inflate(R.layout.adscend_deal_list, container, false);
    getDetail();
    init();

    return m_Main;

}

private void getDetail() {
    CLoginSessionManagement m_oSessionManagement = new CLoginSessionManagement(getActivity());// crating object of Login Session
    HashMap<String, String> user = m_oSessionManagement.getLoginDetails();// get String from Login Session
    m_szMobileNumber = user.get(CLoginSessionManagement.s_szKEY_MOBILE).trim();// getting password from saved preferences..........


}

public void init() {
    m_ListView = (ListView) m_Main.findViewById(R.id.dealList);
    s_oDataset = new ArrayList<>();
    m_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            try {
                String url = s_oDataset.get(position).getM_Link();
                if (!url.startsWith("http://") && !url.startsWith("https://"))
                    url = "http://" + url;
                Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(myIntent);

            } catch (ActivityNotFoundException e) {
                Toast.makeText(getActivity(), "No application can handle this request."
                        + " Please install a webbrowser", Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }
    });
}

@Override
public void onResume() {
    super.onResume();
    getAdscendDeal();
}

public void getAdscendDeal() {
    String url = "http://adsc.com/adwall/api/publisher/" + pubId + "/profile/" + aswallId + "/offers.json?subid1=" + m_szMobileNumber;

    JSONObject jsonObject = new JSONObject();
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, jsonObject, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.e(TAG, "Server Response::" + response);
            try {
                JSONArray post = response.optJSONArray("offers");
                for (int i = 0; i < post.length(); i++) {

                    JSONObject obj = post.getJSONObject(i);
                    m_Item = new CAdscenMediaDealStorage();
                    m_Item.setM_szHeaderText(obj.getString("name"));
                    m_Item.setM_szsubHeaderText(obj.getString("description"));
                    m_Item.setM_szDealValue(obj.getString("currency_count"));
                    m_Item.setM_szImageView(obj.getString("creative_url"));
                    m_Item.setM_Link(obj.getString("click_url"));
                    s_oDataset.add(m_Item);

                }
                if (!s_oDataset.isEmpty()) {
                    m_oAdapter = new CADscendDealAdapter(getActivity(), s_oDataset);// create adapter object and add arraylist to adapter
                    m_ListView.setAdapter(m_oAdapter);//adding adapter to recyclerview
                }


            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Server Error::" + error);
        }
    });
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    requestQueue.add(jsonObjectRequest);
}

最佳答案

当你设置viewpager适配器时,Tab2的onCreateView也会被调用。因此它发送请求。

覆盖 fragment 方法:setUserVisibleHint

public class MyFragment extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
       // Fragment is visible
      // make request here 
    }
    else {
     // Fragment is not visible
    }
}

关于android - 在 Activity 开始选项卡上在 android 中发送服务器请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585742/

相关文章:

android - 调用 OnPrepareOptionsMenu 会产生空指针异常

Android Activity 太忙无法设置 TextView 文本?

java - Android Multipart POST 到 Google App Engine 不工作

android - 如何在 Android 中访问网格中选定图像的 View 资源 ID?

android - 当 block 在 Runnable 体内时发出 Flow 值

android - android连接wifi网络,密码错误返回

java - 为什么 R.raw .'songname' 不能在安卓设备上运行?

android - 切换到特定版本的 Android 源代码

android - 智能手机和桌面应用程序通信技术和跨平台框​​架

android - 我怎样才能看到 OkHttp 客户端的完整内部工作?改造套接字关闭超时