问题遇到的现象和发生背景
debug时出现问题: eglCodecCommon: goldfish_dma_create_region: could not obtain fd to device! fd -1 errno=2
在模拟器上运行时:
问题相关代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.experiment_4">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="recyclerView"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Experiment_4">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
package cn.itcast.experiment_4;
public class Song {
private String SongName;
private int imgID;
public Song(String SongName, int imgID) {
this.SongName = SongName;
this.imgID = imgID;
}
public String getSongName() {
return SongName;
}
public int getImgID() {
return imgID;
}
}
package cn.itcast.experiment_4;
import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class SongAdapter extends RecyclerView.Adapter<SongAdapter.ViewHolder> {
private List<Song> SongList;
public SongAdapter(List<Song> SongList) {
this.SongList = SongList;
}
//在onCreateViewHolder()中完成布局的绑定,同时创建ViewHolder对象,返回ViewHolder对象
@NonNull
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.song_item,parent,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
//在内部类中完成对控件的绑定
public static class ViewHolder extends RecyclerView.ViewHolder {
private final ImageView imageView;
private final TextView textView;
@SuppressLint("CutPasteId")//处理版本不兼容问题
public ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.IV_one_day);
textView = itemView.findViewById(R.id.TV_one_day);
}
}
//在onBindViewHolder()中完成对数据的填充
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.imageView.setImageResource(SongList.get(position).getImgID());
holder.textView.setText(SongList.get(position).getSongName());
}
@Override
public int getItemCount() {
return SongList.size();
}
}
package cn.itcast.experiment_4;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.app.Activity;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity{
private final List<Song> songList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initList();
RecyclerView recyclerView = findViewById(R.id.main_rv_4);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
recyclerView.setLayoutManager(linearLayoutManager);
SongAdapter adapter = new SongAdapter(songList);
recyclerView.setAdapter(adapter);
}
private void initList()
{
Song One_Day = new Song("One_Day",R.drawable.one_day);
songList.add(One_Day);
Song Dear_John = new Song("Dear_John",R.drawable.dear_john);
songList.add(Dear_John);
Song Duck_Till_Dawn = new Song("Duck_Till_Dawn",R.drawable.duck_till_dawn);
songList.add(Duck_Till_Dawn);
Song Euphoria = new Song("Euphoria",R.drawable.euphoria);
songList.add(Euphoria);
Song Golden_Light = new Song("Golden_Light",R.drawable.golden_light);
songList.add(Golden_Light);
Song La_La_La = new Song("La_La_La",R.drawable.la_la_la);
songList.add(La_La_La);
Song Last_Reunion = new Song("Last_Reunion",R.drawable.last_reunion);
songList.add(Last_Reunion);
Song Na_Na_Na = new Song("Na_Na_Na",R.drawable.na_na_na);
songList.add(Na_Na_Na);
Song Something_Just_Like_This = new Song("Something_Just_Like_This",R.drawable.something_just_like_this);
songList.add(Something_Just_Like_This);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/IV_one_day"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="0dp"
/>
<TextView
android:id="@+id/TV_one_day"
android:layout_width="300dp"
android:layout_height="100dp"
android:gravity="center"
android:textSize="25sp" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_rv_4"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp">
</androidx.recyclerview.widget.RecyclerView>
</androidx.constraintlayout.widget.ConstraintLayout>
这个问题怎么解决,上网百度了好久都没有找到类似的关键字eglCodecCommon: goldfish_dma_create_region: could not obtain fd to device! fd -1 errno=2。
换个模拟器吧
关机几小时后重启相同模拟器可以运行,但是结果有些不对,recyclerview的效果是一个item占了一页模拟器页面的高度,相当于item之间隔了一整个模拟器高度的距离。此外,用新建的模拟器运行,向下划到第二个item多一点就XXX has stopped了,而使用之前的模拟器可以划完全部内容而不闪退,所以应该是代码问题。但是我是刚刚刚刚接触Java的,更别提AS了,希望诸位大哥能发现其中问题所在!