okhttp请求+recycleview+网络是否连接成功

本文展示了如何在Android应用中使用OkHttp发送网络请求获取数据,并将其加载到RecyclerView中。同时,实现了一个网络连接状态检测功能,当网络不可用时,提示用户并引导设置网络。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends AppCompatActivity {
    private String url = "url地址";
    private RecyclerView recyclerView;
    private RecyclerAdapter adapter;
    private List<bean类> list = new ArrayList<>();
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            String s = (String) msg.obj;
            Gson gson = new Gson();
            ViewBean bean = gson.fromJson(s, ViewBean.class);

            list.addAll(bean.list);
            adapter.notifyDataSetChanged();
            Log.e("-----------------", "---" + list.size());

            adapter.setOnItemClickLitener(new RecyclerAdapter.OnItemClickLitener() {

                @Override
                public void onItemClick(View view, int position) {

                    Toast.makeText(MainActivity.this, list.get(position),
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recycle);
        boolean conn = Connutlis.isConn(this);
      //判断网络是否连接成功
        if(!conn){
      //没有网络
           Connutlis.setNetworkMethod(this);
            loadData();
        }else {
            loadData();
        }
        //设置recycler管理器
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
       //分割线
       recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
        adapter = new RecyclerAdapter(this, list);

       //设置适配器
      recyclerView.setAdapter(adapter);
    }
    //okhttp请求
    private void loadData() {
        OkHttpClient mOkHttp = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(20, TimeUnit.SECONDS)
                .build();
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();

        Call call = mOkHttp.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String s = response.body().string();
                Message mes = Message.obtain();
                mes.obj = s;
                handler.sendMessage(mes);

            }
        });
    }
}

//

设置item点击首先在style样式中加入

加入selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/colorAccent"></item>
    <item android:drawable="@color/colorPrimary"></item>
</selector>
加入分割线:
首先在values中加入:
<item name="android:listDivider">@drawable/divider</item>
设置shape样式:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#f00"></solid>
    <size android:height="3dp"></size>

</shape>

RecyclerAdapter 类:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
    private MyViewHolder viewHolder;
    private Context context;
    private List<ViewBean.ListBean> list;

    public RecyclerAdapter(Context context, List<ViewBean.ListBean> list) {
        this.context = context;
        this.list = list;
    }

    public interface OnItemClickLitener
    {
        void onItemClick(View view, int position);
    }

    private OnItemClickLitener mOnItemClickLitener;

    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
    {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }

    @Override
    public RecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item, null);
        viewHolder = new MyViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerAdapter.MyViewHolder holder, int position) {

         list.get(position);
       

        // 如果设置了回调,则设置点击事件
        if (mOnItemClickLitener != null)
        {
            holder.itemView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                   
                    mOnItemClickLitener.onItemClick(viewHolder.itemView, position);
                    ObjectAnimator
                            .ofFloat(v, "rotationX", 0.0F, 360.0F)
                            .setDuration(500)
                            .start();
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        return list == null ? 0 : list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        
        public MyViewHolder(View itemView) {
            super(itemView);

           
        }
    }
}


//
网络连接成功与否:
public class Connutlis {
    /*
         * 判断网络连接是否已开
         *true 已打开  false 未打开
         * */
    public static boolean isConn(Context context) {
        boolean bisConnFlag = false;
        ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo network = conManager.getActiveNetworkInfo();
        if (network != null) {
            bisConnFlag = conManager.getActiveNetworkInfo().isAvailable();
        }
        return bisConnFlag;
    }
    /*
  * 打开设置网络界面
  * */
    public static void setNetworkMethod(final Context context){
        //提示对话框
        AlertDialog.Builder builder=new AlertDialog.Builder(context);
        builder.setTitle("网络设置提示").setMessage("网络连接不可用,是否进行设置?").setPositiveButton("设置", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Intent intent=null;
                //判断手机系统的版本  即API大于10 就是3.0或以上版本
                if(android.os.Build.VERSION.SDK_INT>10){
                    intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                }else{
                    intent = new Intent();
                    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
                    intent.setComponent(component);
                    intent.setAction("android.intent.action.VIEW");
                }
                context.startActivity(intent);
            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                dialog.dismiss();
            }
        }).show();
    }


}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值