Java RecyclerView显示相同的项目
我试图实现RecyclerView,显示来自JSONArray的数据。解析工作非常完美,但RecyclerView在每个项目中显示必须仅在最后一个项目中的信息 这是我的密码: MainActivity.javaJava RecyclerView显示相同的项目,java,android,android-recyclerview,Java,Android,Android Recyclerview,我试图实现RecyclerView,显示来自JSONArray的数据。解析工作非常完美,但RecyclerView在每个项目中显示必须仅在最后一个项目中的信息 这是我的密码: MainActivity.java public class MainActivity extends AppCompatActivity { RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.La
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
new parseTask().execute();
}
private class parseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
ProgressDialog pdLoading = new ProgressDialog(MainActivity.this, R.style.MyDialogStyle);
@Override
protected void onPreExecute() {
super.onPreExecute();
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL("http://songo.eu.pn/db_GetFromSongs.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
resultJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultJson;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
List<DataSongs> data = new ArrayList<>();
JSONObject dataJsonObj = null;
try {
dataJsonObj = new JSONObject(strJson);
JSONArray songs = dataJsonObj.getJSONArray("Songs");
DataSongs songData = new DataSongs();
for (int i = 0; i < songs.length(); i++) {
JSONObject song = songs.getJSONObject(i);
songData.songName = song.getString("song");
songData.songGenreID = song.getString("GenreID");
songData.songUserID = song.getString("UserID");
data.add(songData);
Log.e("songo", "SongName: " + data.get(i).songName);
}
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mAdapter = new RecyclerAdapter(MainActivity.this, data, mRecyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(mLayoutManager);
} catch (JSONException e) {
e.printStackTrace();
}
pdLoading.dismiss();
}
}
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private Context context;
private LayoutInflater inflater;
List<DataSongs> data = Collections.emptyList();
public RecyclerAdapter(Context context, List<DataSongs> data, RecyclerView recyclerView) {
this.context = context;
inflater = LayoutInflater.from(context);
this.data = data;
this.recyclerView = recyclerView;
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv_songName;
TextView tv_songGenreID;
TextView tv_songUserID;
public ViewHolder(View itemView) {
super(itemView);
tv_songName = (TextView) itemView.findViewById(R.id.tv_songName);
tv_songGenreID = (TextView) itemView.findViewById(R.id.tv_songGenreID);
tv_songUserID = (TextView) itemView.findViewById(R.id.tv_songUserID);
}
}
// Создает новые views (вызывается layout manager-ом)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v=inflater.inflate(R.layout.recycler_item, parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
DataSongs current = data.get(position);
holder.tv_songName.setText(current.songName);
holder.tv_songGenreID.setText(current.songGenreID);
holder.tv_songUserID.setText(current.songUserID);
Log.e("songo", "SongName: " + data.get(position).songName);
}
@Override
public int getItemCount() {
return data.size();
}
public类MainActivity扩展了AppCompatActivity{
回收视图mRecyclerView;
专用回收器查看适配器mAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
创建时受保护的void(Bundle savedInstanceState){
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(右布局、主布局);
新建parseTask().execute();
}
私有类parseTask扩展了AsyncTask{
HttpURLConnection-urlConnection=null;
BufferedReader reader=null;
字符串resultJson=“”;
ProgressDialog pdLoading=新建ProgressDialog(MainActivity.this,R.style.MyDialogStyle);
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pdLoading.setMessage(“\t加载…”);
pdLoading.setCancelable(假);
pdLoading.show();
}
@凌驾
受保护字符串doInBackground(无效…参数){
试一试{
URL=新URL(“http://songo.eu.pn/db_GetFromSongs.php");
urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod(“GET”);
urlConnection.connect();
InputStream InputStream=urlConnection.getInputStream();
StringBuffer=新的StringBuffer();
reader=新的BufferedReader(新的InputStreamReader(inputStream));
弦线;
而((line=reader.readLine())!=null){
buffer.append(行);
}
resultJson=buffer.toString();
}捕获(例外e){
e、 printStackTrace();
}
返回resultJson;
}
@凌驾
受保护的void onPostExecute(字符串strJson){
super.onPostExecute(strJson);
列表数据=新的ArrayList();
JSONObject数据JSONOBJ=null;
试一试{
dataJsonObj=新的JSONObject(strJson);
JSONArray songs=dataJsonObj.getJSONArray(“歌曲”);
DataSongs songData=新的DataSongs();
对于(int i=0;i
RecyclerAdapter.java
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
new parseTask().execute();
}
private class parseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
ProgressDialog pdLoading = new ProgressDialog(MainActivity.this, R.style.MyDialogStyle);
@Override
protected void onPreExecute() {
super.onPreExecute();
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL("http://songo.eu.pn/db_GetFromSongs.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
resultJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultJson;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
List<DataSongs> data = new ArrayList<>();
JSONObject dataJsonObj = null;
try {
dataJsonObj = new JSONObject(strJson);
JSONArray songs = dataJsonObj.getJSONArray("Songs");
DataSongs songData = new DataSongs();
for (int i = 0; i < songs.length(); i++) {
JSONObject song = songs.getJSONObject(i);
songData.songName = song.getString("song");
songData.songGenreID = song.getString("GenreID");
songData.songUserID = song.getString("UserID");
data.add(songData);
Log.e("songo", "SongName: " + data.get(i).songName);
}
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mAdapter = new RecyclerAdapter(MainActivity.this, data, mRecyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(mLayoutManager);
} catch (JSONException e) {
e.printStackTrace();
}
pdLoading.dismiss();
}
}
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private Context context;
private LayoutInflater inflater;
List<DataSongs> data = Collections.emptyList();
public RecyclerAdapter(Context context, List<DataSongs> data, RecyclerView recyclerView) {
this.context = context;
inflater = LayoutInflater.from(context);
this.data = data;
this.recyclerView = recyclerView;
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv_songName;
TextView tv_songGenreID;
TextView tv_songUserID;
public ViewHolder(View itemView) {
super(itemView);
tv_songName = (TextView) itemView.findViewById(R.id.tv_songName);
tv_songGenreID = (TextView) itemView.findViewById(R.id.tv_songGenreID);
tv_songUserID = (TextView) itemView.findViewById(R.id.tv_songUserID);
}
}
// Создает новые views (вызывается layout manager-ом)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v=inflater.inflate(R.layout.recycler_item, parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
DataSongs current = data.get(position);
holder.tv_songName.setText(current.songName);
holder.tv_songGenreID.setText(current.songGenreID);
holder.tv_songUserID.setText(current.songUserID);
Log.e("songo", "SongName: " + data.get(position).songName);
}
@Override
public int getItemCount() {
return data.size();
}
公共类RecyclerAdapter扩展了RecyclerView.Adapter{
私人语境;
私人充气机;
List data=Collections.emptyList();
公共RecyclerAdapter(上下文上下文、列表数据、RecyclerView RecyclerView){
this.context=上下文;
充气器=充气器。从(上下文);
这个数据=数据;
this.recyclerView=recyclerView;
}
类ViewHolder扩展了RecyclerView.ViewHolder{
TextView tv_songName;
TextView tv_songGenreID;
TextView电视用户ID;
公共视图持有者(视图项视图){
超级(项目视图);
tv_songName=(TextView)itemView.findViewById(R.id.tv_songName);
tv_songGenreID=(TextView)itemviewbyd(R.id.tv_songGenreID);
tv_songUserID=(TextView)itemView.findViewById(R.id.tv_songUserID);
}
}
//视图(布局管理器-项目)
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=充气机。充气(R.layout.recycler\u项目,父项,false);
返回新的视图持有者(v);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
DataSongs current=data.get(位置);
holder.tv_songName.setText(当前的.songName);
holder.tv_songGenreID.setText(当前的songGenreID);
holder.tv_songUserID.setText(当前的.songUserID);
Log.e(“songo”,“SongName:”+data.get(position.SongName));
}
@凌驾
public int getItemCount(){
返回data.size();
}
来自MainActivity的日志按原样显示信息(没有相等的行)
来自RecyclerAdapter的日志显示每个歌曲名都是相同的
DataSongs songData = new DataSongs();
在for循环中的这行代码中,您每次都需要创建新的json对象来解决此问题
试试这个
try {
dataJsonObj = new JSONObject(strJson);
JSONArray songs = dataJsonObj.getJSONArray("Songs");
DataSongs songData = null;
for (int i = 0; i < songs.length(); i++) {
songData = new DataSongs();
JSONObject song = songs.getJSONObject(i);
songData.songName = song.getString("song");
songData.songGenreID = song.getString("GenreID");
songData.songUserID = song.getString("UserID");
data.add(songData);
Log.e("songo", "SongName: " + data.get(i).songName);
}
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mAdapter = new RecyclerAdapter(MainActivity.this, data, mRecyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(mLayoutManager);
} catch (JSONException e) {
e.printStackTrace();
}
试试看{
dataJsonObj=新的JSONObject(strJson);
JSONArray songs=dataJsonObj.getJSONArray(“歌曲”);
DataSongs songData=null;
对于(int i=0;i dataJsonObj = new JSONObject(strJson);
JSONArray songs = dataJsonObj.getJSONArray("Songs");
DataSongs songData = new DataSongs();
for (int i = 0; i < songs.length(); i++) {
JSONObject song = songs.getJSONObject(i);
songData.songName = song.getString("song");
songData.songGenreID = song.getString("GenreID");
songData.songUserID = song.getString("UserID");
data.add(songData);
Log.e("songo", "SongName: " + data.get(i).songName);
}
dataJsonObj = new JSONObject(strJson);
JSONArray songs = dataJsonObj.getJSONArray("Songs");
for (int i = 0; i < songs.length(); i++) {
JSONObject song = songs.getJSONObject(i);
DataSongs songData = new DataSongs();
songData.songName = song.getString("song");
songData.songGenreID = song.getString("GenreID");
songData.songUserID = song.getString("UserID");
data.add(songData);
Log.e("songo", "SongName: " + data.get(i).songName);
}
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
new parseTask().execute();
}
private class parseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
ProgressDialog pdLoading = new ProgressDialog(MainActivity.this, R.style.MyDialogStyle);
@Override
protected void onPreExecute() {
super.onPreExecute();
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL("http://songo.eu.pn/db_GetFromSongs.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
StringBuffer buffer = new StringBuffer();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
resultJson = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return resultJson;
}
@Override
protected void onPostExecute(String strJson) {
super.onPostExecute(strJson);
List<DataSongs> data = new ArrayList<>();
JSONObject dataJsonObj = null;
try {
dataJsonObj = new JSONObject(strJson);
JSONArray songs = dataJsonObj.getJSONArray("Songs");
for (int i = 0; i < songs.length(); i++) {
JSONObject song = songs.getJSONObject(i);
/**
* you were wrong here
*/
DataSongs songData = new DataSongs();
songData.songName = song.getString("song");
songData.songGenreID = song.getString("GenreID");
songData.songUserID = song.getString("UserID");
data.add(songData);
Log.e("songo", "SongName: " + data.get(i).songName);
}
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mAdapter = new RecyclerAdapter(MainActivity.this, data, mRecyclerView);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(MainActivity.this);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(mLayoutManager);
} catch (JSONException e) {
e.printStackTrace();
}
pdLoading.dismiss();
}
}