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"
... />