مشکل در نمایش اطلاعات دریافتی از اینترنت در recyclerview
دوستان من یک سری اطلاعات json رو از روش volley از اینترنت دریافت میکنم و در recyclerview نمایش می دهم اما اطلاعات نشان داده شده برای بار اول در ریسایکلر اطلاعات ذخیره شده مرحله قبل می باشد یعنی برای بار اول که اکتیویتی رو اجرا میکنم اطلاعات رو دریافت میکنم اما در مرحله دوم ورود به اکتیویتی اونارو نشون میده .به عبارت دیگه اطلاعات نمایشی در ریسایکلر اطلاعات دانلود شده مرحله قبله.از asynktask هم استفاده کردم اما مشکل پابرجاست.اینم کدهام:
من ابتدا اطلاعات رو میگییرم و در متغییر های از نوع لیست ذخییره کردم بعد اونارو بصورت پارامتر به ریسایکلر ارسال میکنم
اینکدهای اکتیویتی اصلیم:
package .................;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class EventActivity extends AppCompatActivity {
private String jsonResponseEventName;
private String jsonResponseEventStartDate;
private String jsonResponseEventEndDate;
private String jsonResponseEventTime;
private String jsonResponseEventLocation;
private String jsonResponseEventOwner;
private String jsonResponseEventDes;
private String jsonResponseEventPic;
//--------------------------------
private ProgressDialog pDialog;
//-------------------------
private MyDatabase db;
//----------------------------
private String urlJsonArray="http://............./event.php";
private static String TAG = ListActivity.class.getSimpleName();
static List<String> eventNameItems = new ArrayList<String>();
static List<String> eventStartDateItems = new ArrayList<String>();
static List<String> eventEndDateItems = new ArrayList<String >();
static List<String> eventTimeItems = new ArrayList<String>();
static List<String> eventLocationItems = new ArrayList<String>();
static List<String> eventOwnerItems = new ArrayList<String>();
static List<String> eventDesItems = new ArrayList<String>();
static List<String> eventPicOItems = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
//------------
pDialog = new ProgressDialog(this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
db=new MyDatabase(this);
new GetData().execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_event, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_send_event){
Intent sendEventActivity =new Intent(EventActivity.this,SendEventActivity.class);
startActivity(sendEventActivity);
return true;
}
if (id == R.id.action_exit) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public void setaddapter(){
//tarif class adapter recyclview
RecyclerView recyclerViewlist=(RecyclerView) findViewById(R.id.eventList);
recyclerViewlist.setAdapter(new RVAdapterEvent(this, eventNameItems, eventStartDateItems, eventEndDateItems,
eventTimeItems, eventLocationItems, eventOwnerItems, eventDesItems, eventPicOItems));
//tarif layout maneger baraye tarif noe nemayesh
recyclerViewlist.setLayoutManager(new LinearLayoutManager(this));
}
private class GetData extends AsyncTask<String,Integer,String >{
@Override
protected String doInBackground(String... params) {
JsonArrayRequest req = new JsonArrayRequest(urlJsonArray,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
try {
// Parsing json array response
// loop through each json object
eventNameItems.clear();
eventStartDateItems.clear();
eventEndDateItems.clear();
eventTimeItems.clear();
eventLocationItems.clear();
eventOwnerItems.clear();
eventDesItems.clear();
eventPicOItems.clear();
db.Querry("DELETE FROM tbl_event");
for (int i = 0; i < response.length(); i++) {
jsonResponseEventName = "";
jsonResponseEventStartDate="";
jsonResponseEventEndDate="";
jsonResponseEventTime="";
jsonResponseEventLocation="";
jsonResponseEventOwner="";
jsonResponseEventDes="";
jsonResponseEventPic="";
JSONObject person = (JSONObject) response.get(i);
String name = person.getString("name");
String startdate = person.getString("startdate");
String enddate = person.getString("enddate");
String time = person.getString("time");
String location = person.getString("location");
String owner = person.getString("owner");
String des = person.getString("des");
String pic = person.getString("pic");
db.Querry("INSERT INTO tbl_event ( name , startdate , enddate , time , location , owner , des , pic ) " +
"VALUES ('"+name+"','"+startdate+"','"+enddate+"','"+time+"','"+location+"','"+owner+"','"+des+"','"+pic+"' )");
// Toast.makeText(ListActivity.this,name,Toast.LENGTH_SHORT).show();
jsonResponseEventName = name;
jsonResponseEventStartDate = startdate;
jsonResponseEventEndDate = enddate;
jsonResponseEventTime= time;
jsonResponseEventLocation=location;
jsonResponseEventOwner = owner;
jsonResponseEventDes = des;
jsonResponseEventPic = pic;
eventNameItems.add(jsonResponseEventName);
eventStartDateItems.add(jsonResponseEventStartDate);
eventEndDateItems.add(jsonResponseEventEndDate);
eventTimeItems.add(jsonResponseEventTime);
eventLocationItems.add(jsonResponseEventLocation);
eventOwnerItems.add(jsonResponseEventOwner);
eventDesItems.add(jsonResponseEventDes);
eventPicOItems.add(jsonResponseEventPic);
}
//txtResponse.setText(jsonResponse);
//for (int i=0;i<100;i++){
// items.add("item #"+i);
// }
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(),
"ارتباط با سرور برقرار نشد،آخرین اطلاعات دریافتی نمایش داده می شود",
Toast.LENGTH_LONG).show();
//---------------------------------------------------------------------
// makeDatabaseRequest_Event();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(),
"ارتباط با سرور برقرار نشد،آخرین اطلاعات دریافتی نمایش داده می شود",
Toast.LENGTH_LONG).show();
// makeDatabaseRequest_Event();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(req);
return null;
}
@Override
protected void onPostExecute(String s) {
setaddapter();
hidepDialog();
}
@Override
protected void onPreExecute() {
showpDialog();
}
}
private void showpDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hidepDialog() {
if (pDialog.isShowing())
pDialog.dismiss();
}
}
اینم کدهای آداپتر ریسایکلرویو
package ....................;
import android.content.Context;
import android.net.Uri;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
/**
* Created by Amir on 02/09/2016.
*/
public class RVAdapterEvent extends RecyclerView.Adapter<RVAdapterEvent.MyViewHolder> {
//consteraktor ra misazim
private Context context;
private LayoutInflater inflater;
List<String> eventNameItems;
List<String> eventStartDateItems;
List<String > eventEndDateTtems;
List<String> eventTimeItems;
List<String> eventLocationItems;
List<String> eventOwnerItems;
List<String> eventDesItems;
List<String> eventPicItems;
public RVAdapterEvent(EventActivity context, List<String> eventNameItems, List<String > eventStartDateItems, List<String> eventEndDateTtems,
List<String> eventTimeItems, List<String> eventLocationItems, List<String> eventOwnerItems,
List<String> eventDesItems, List<String> eventPicItems){
this.context=context;
this.inflater=LayoutInflater.from(context);
this.eventNameItems=eventNameItems;
this.eventStartDateItems=eventStartDateItems;
this.eventEndDateTtems=eventEndDateTtems;
this.eventTimeItems=eventTimeItems;
this.eventLocationItems=eventLocationItems;
this.eventOwnerItems=eventOwnerItems;
this.eventDesItems=eventDesItems;
this.eventPicItems=eventPicItems;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//bayad aval yek layout besazim - recycler_layout
//layout ro moarefi mikonim
View v=inflater.inflate(R.layout.rvevent_layout,parent,false);
MyViewHolder vh=new MyViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
//itemhaei ke bayad neshan dadeh shavad bayad inja vared shavad
Uri uri =Uri.parse(eventPicItems.get(position));
Picasso.with(context).load(uri).resize(400,400).centerCrop().into(holder.eventImage, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
holder.eventImage.setImageResource(R.mipmap.logo1);
}
});
holder.eventName.setText(eventNameItems.get(position));
holder.eventStartDate.setText("تاریخ شروع:"+eventStartDateItems.get(position));
holder.eventEndDate.setText("تاریخ پایان:"+eventEndDateTtems.get(position));
holder.eventTime.setText("ساعت شروع:"+eventTimeItems.get(position));
holder.eventLocation.setText("محل برگزاری:" +eventLocationItems.get(position));
holder.eventOwner.setText("برگزار کننده:" +eventOwnerItems.get(position));
holder.eventDes.setText("توضیحات:" +eventDesItems.get(position));
}
@Override
public int getItemCount() {
//tedad itemhara baraye nemayesh midahim
return eventNameItems.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
//bayad ajzaye layout ro tarif konim
ImageView eventImage;
TextView eventName;
TextView eventStartDate;
TextView eventEndDate;
TextView eventTime;
TextView eventLocation;
TextView eventOwner;
TextView eventDes;
CardView cvMyCard;
public MyViewHolder(View itemView) {
super(itemView);
eventImage=(ImageView) itemView.findViewById(R.id.ivEventImage);
eventName= (TextView) itemView.findViewById(R.id.tvEventName);
eventStartDate = (TextView) itemView.findViewById(R.id.tvEventStartDate);
eventEndDate = (TextView) itemView.findViewById(R.id.tvEventEndDate);
eventTime = (TextView) itemView.findViewById(R.id.tvEventTime);
eventLocation = (TextView) itemView.findViewById(R.id.tvEventLocation);
eventOwner = (TextView) itemView.findViewById(R.id.tvEventOwner);
eventDes = (TextView) itemView.findViewById(R.id.tvEventDes);
cvMyCard = (CardView) itemView.findViewById(R.id.CVEvent);
}
}
}
اگه امکانش هست میتونید در هر دو مورد بیشتر راهنماییم کنید و یا یک منبع آموزشی در اختیارم قرار بدید؟
مشکلم حل شد
از این آموزش استفاده کردم
http://codeyab.rozblog.com/Forum/Post/1
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .