Android开发 初学沙雕问题汇总

findViewById() 提示空指针异常 java.lang.NullPointerException.

控件都能找到,为何运行时还是提示空指针异常?

原因分析:

  • 引用其他布局里的控件需要先加载布局文件。

解决方法:

view = LayoutInflater.from(this).inflate(R.layout.radio_layout, null);
RadioGroup radioGroup = view.findViewById(R.id.genderGroup);
radioGroup.setOnCheckedChangeListener...

第二次点击Dialog时报错 java.lang.IllegalStateException.

在自定义Dialog的时候,第一次能够正常显示内容,第二次点击是报错。

原因分析:

  • 在调用builder.show()的时候,新的builder不会接收我们自定义的view,因为它认为你之前的view已经绑定过了。
  • View不要设置为全局变量,应该设置为局部变量,这样每次builder都可以正常加载了。

解决方法:

public void genderDialog() {
    View view = LayoutInflater.from(this).inflate(R.layout.sex_layout, null);
    builder = new AlertDialog.Builder(this)
            //设置dialog的视图
            .setView(view)
            .setTitle("请选择性别:")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, sex, Toast.LENGTH_SHORT).show();
                }
            })
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    builder.show();
}

Http无法获取网络 java.net.SocketException

java.net.SocketException: socket failed: EPERM (Operation not permitted)

解决方法:

确认在Manifest.xml申请权限后,卸载软件再重装就好了。


Android Q版本中已经动态申请了权限还是无法读取文件问题

open failed: EACCES (Permission denied)

原因分析:

  • 最新的Android10需要在Application中声明一种属性。

解决方法:

<application
    android:requestLegacyExternalStorage=“true”/>

RecyclerViewAdapter 获取数据的时候空指针异常 java.lang.NullPointerException.

@Override
public int getItemCount() {
    return mData.getTotal();
}

原因分析:

  • 设置数据之前需要初始化数据
  • 网络请求的数据需要在完成后加载 Adapter

解决方法:

public MyRecyclerViewAdapter(Context context) {
    //初始化数据源,否则getItemCount会出现空指针
    this.dataSource = new ArrayList<>();
    this.mContext = context;
}
api.getAll().enqueue(new Callback<Result>() {
    @Override
    public void onResponse(Call<Result> call, Response<Result> response) {
        Result result = response.body();

        MovieAdapter adapter = new MovieAdapter(result);
        mainBinding.rvList.setLayoutManager(new GridLayoutManager(MainActivity.this, 2));
        mainBinding.rvList.setAdapter(adapter);
    }

    @Override
    public void onFailure(Call<Result> call, Throwable t) {
        Toast.makeText(MainActivity.this, "网络错误", Toast.LENGTH_SHORT).show();
    }
});

RecyclerViewAdapter 加载图片卡顿严重

RecyclerView 滑动的时候在加载图片卡顿非常明显

public void bindMovieImg(String s) {
    Glide.with(doubleItemBinding.getRoot().getContext())
            .load(s)
            .into(doubleItemBinding.ivMovieImg);
}

原因分析:

  • ImageView 不要使用裁切,直接填充。
  • glide 缓存的图片问题

解决方法:

android:scaleType 使用填充 ImageView 的大小,免去加载图片的时候还要裁切。

<ImageView
    android:id="@+id/iv_movie_img"
    android:layout_width="170dp"
    android:layout_height="220dp"
    android:scaleType="fitXY"
    tools:src="@mipmap/p2455261804" />

RecyclerView 中的 item 无法居中显示

原因分析:

  • RecyclerView 中的 layout_width 没有设置成 wrap_content 或者 match_parent。

解决方法:

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_list"
        android:layout_width="wrap_content"
        ... />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值