如何在Fragment中进行网络通信

1.我们知道安卓中许多的接口调用都需要用到context,而fragment本身不是一个context

2.最简单的方法就是通过getActivity()的方法来获得fragment所在的类

3.然后同过该context进行网络通信

4.案例如下:

package com.example.dengjiale.xuanshang.fragment;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.Toast;

import com.alibaba.fastjson.JSONArray;
import com.example.dengjiale.xuanshang.R;
import com.example.dengjiale.xuanshang.activity.MainActivity;
import com.example.dengjiale.xuanshang.adapter.OrderAdapter;
import com.example.dengjiale.xuanshang.entity.Order;
import com.example.dengjiale.xuanshang.utils.NetUtil;

import java.io.IOException;
import java.util.ArrayList;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

/**
 * Created by dengjiale on 2018/4/12.
 */

public class HomeFragment extends Fragment {
   //设置所在activity的引用
    Activity activity;
    ArrayListorderList;
    OrderAdapter orderAdapter;
    ListView listView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /* 引用创建好的xml布局 */
        View view = inflater.inflate(R.layout.fragment_home,container,false);
        listView=(ListView)view.findViewById(R.id.homeFragment_listview);
        orderList=new ArrayList<>();
        activity=getActivity();
        orderAdapter=new OrderAdapter(orderList,activity);
        getOrderList();
        return view;

    }

    //列表初始化
    public void getOrderList() {
        final ProgressDialog progressDialog = ProgressDialog.show(activity, "加载中", "请稍后...");
        NetUtil.getOrderList(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        progressDialog.dismiss();
                        Toast.makeText(activity, "网络错误", Toast.LENGTH_SHORT).show();
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String result = response.body().string();

                activity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        progressDialog.dismiss();
                        orderList = (ArrayList) JSONArray.parseArray(result, Order.class);
                        if (orderList != null) {

                            OrderAdapter adapter = new OrderAdapter(orderList, activity);
                            listView.setAdapter(adapter);
                        } else {
                            Toast.makeText(activity, "列表空空如也", Toast.LENGTH_SHORT).show();
                        }

                    }
                });

            }
        });


    }
}

你可能感兴趣的:(android开发)