خطا در RecyclerView
با سلام خدمت دوستان من در اپلیکیشنم از RecyclerView استفاده کردم لیست که به آداپتر RecyclerView وصل گردم رو از روی سرور بروز میکنم ولی گاهی هنگام لود شدن آیتم های RecyclerView برنامه کرش میکنه و خطای IndexOutOfBoundsException میده
مثلا
Inconsistency detected. Invalid item position 2(offset:2).state:52
کارهای مختلفی کردم مثلا تابع getItemCount() رو به صورت های زیر استفاده کردم ولی باز خطا داد
یا اینکه در سطر اول تابع onBindViewHolder چک کردم که position کوچیکتر از سایز آرایه باشه یا کل تابع رو داخل catch/try گذاشتم یا اینکه به جای position از holder.getAdapterPosition() استفاده کردم
@Override
public int getItemCount() {
for(int i=0;i<array.size();i++)
{if(array.get(i)==null){return 0;}}
return array == null ? 0 : array.size();
}
یا
//*******************************************************
@Override
public int getItemCount() {
return array == null ? 0 : array.size();
}
یا
//*******************************************************
@Override
public int getItemCount() {
return array.size();
}
//*******************************************************
public void onBindViewHolder(ViewHolderRequest holder, int position) {
try {
if (holder.getAdapterPosition()<=array.size()&&array.get(holder.getAdapterPosition())!=null) {
final StructUserRequest item = array.get(holder.getAdapterPosition());
یا
//*******************************************************
public void onBindViewHolder(ViewHolderRequest holder, int position) {
try {
if (position<=array.size()&&array.get(position)!=null) {
final StructUserRequest item = array.get(position);
public class RecyclerUserRequestList extends RecyclerView.Adapter<RecyclerUserRequestList.ViewHolderRequest> {
private ArrayList<StructUserRequest> array;
public RecyclerUserRequestList(ArrayList<StructUserRequest> array ) {
this.array=array;
}
@Override
public ViewHolderRequest onCreateViewHolder(ViewGroup parent, int viewType) {
View v = inflateLayout(R.layout.adapter_user_request, parent, false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
v.setLayoutParams(lp);
return new ViewHolderRequest(v);
}
@Override
public void onBindViewHolder(ViewHolderRequest holder, int position) {
try {
if (holder.getAdapterPosition()<=array.size()&&array.get(holder.getAdapterPosition())!=null) {
final StructUserRequest item = array.get(holder.getAdapterPosition());
holder.txtAgentCompanyName.setText(item.companyName);
//.....//
}catch (Exception e) {}
}
@Override
public int getItemCount() {
for(int i=0;i<array.size();i++)
{if(array.get(i)==null){return 0;}}
return array == null ? 0 : array.size();
}
public static class ViewHolderRequest extends RecyclerView.ViewHolder {
public ViewGroup layoutRoot;//
public TextView txtAgentCompanyName;//
//.....//
public ViewHolderRequest(View view) {
super(view);
layoutRoot = (ViewGroup) view.findViewById(R.id.layoutRoot);//
txtAgentCompanyName = (TextView) view.findViewById(R.id.txtAgentCompanyName);//
public class ActivityUserRequest extends UAppCompatActivity {
private RecyclerView UserRequestList;
private RecyclerUserRequestList UserRequestAdapter;
private LinearLayout lytState;
private TextView txtCState;
private TextView txtProgressBar;
private Spinner spinnerState;
private ArrayList<StructUserRequest> userreguest = new ArrayList<StructUserRequest>();
private String filter1 = "1=1";
private int userid=G.setting.getInt("user_id",0);
private String data = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_request_list);
lytState = (LinearLayout) findViewById(R.id.lytState);
txtCState = (TextView) findViewById(R.id.txtCState);
txtProgressBar = (TextView) findViewById(R.id.txtProgressBar);
UserRequestList = (RecyclerView) findViewById(R.id.listRequest);
spinnerState= (Spinner) findViewById(R.id.spinnerState);
UserRequestList.setLayoutManager(new LinearLayoutManager(this));
UserRequestAdapter = new RecyclerUserRequestList(userreguest);
UserRequestList.setAdapter(UserRequestAdapter);
changefont();
changeSize();
spinerSort();
populateRequestFromServer();
}
private void changefont(){
Typeface font4 = Typeface.createFromAsset(getAssets(), G.FONT_NAME);
txtCState.setTypeface(font4);
txtCState.setTextSize(G.FontSize);
txtProgressBar.setTypeface(font4);
txtProgressBar.setTextSize(G.FontSize+4);
}
private void changeSize(){
lytState.getLayoutParams().height= G.heightscreen*3 /36;
}
void spinerSort(){
final List<String> categories = new ArrayList<String>();
categories.add("همه وضعیت ها");
categories.add("در حال پیگیری");
categories.add("صادر شده");
categories.add("منتفی");
ArrayAdapter<String> dataAdapter = null;
if(G.FontSize<=14) {
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item_2, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item_2);
}else if(G.FontSize>14&&G.FontSize<=16) {
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item_1, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item_1);
}else if(G.FontSize>16&&G.FontSize<=19) {
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item);
} else if(G.FontSize>19&&G.FontSize<=22){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item1, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item1);
} else if(G.FontSize>22&&G.FontSize<=25){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item2, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item2);
} else if(G.FontSize>25&&G.FontSize<=28){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item3, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item3);
}else if(G.FontSize>28&&G.FontSize<=32){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item4, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item4);
}else if(G.FontSize>32&&G.FontSize<=36){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item5, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item5);
}else if(G.FontSize>36&&G.FontSize<=40){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item6, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item6);
}else if(G.FontSize>40&&G.FontSize<=44){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item7, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item7);
}else if(G.FontSize>44){
dataAdapter = new ArrayAdapter<String>(G.getContext(), R.layout.layout_spiner_item8, categories);
dataAdapter.setDropDownViewResource(R.layout.simple_spinner_item8);
}
spinnerState.setAdapter(dataAdapter);
spinnerState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
if(i==0)
{
filter1 = "1=1";
}
else {
filter1 = "statusrequestuser=" + (i-1);
}
populateRequestFromServer();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
private void populateRequestFromServer() {
UserRequestList.setVisibility(View.GONE);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String url = "http://"+ G.IP+"/userrequest.php";
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("command", "read"));
params.add(new BasicNameValuePair("filter", "user_id="+userid));
params.add(new BasicNameValuePair("filter1", filter1));
try {
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 2000);
HttpConnectionParams.setSoTimeout(httpParams, 1000);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = client.execute(request);
data = streamToString(httpResponse.getEntity().getContent());
Log.i("LOG","data: "+data);
if (data != null) {
try {
userreguest.clear();
JSONArray apps = new JSONArray(data);
for (int i = 0; i < apps.length(); i++) {
JSONObject object = apps.getJSONObject(i);
StructUserRequest userRequest = new StructUserRequest();
userRequest.userrequest_id = object.getInt("userrequest_id");
userRequest.agentCode = object.getString("agentCode");
userRequest.agentName = object.getString("agentName");
userRequest.agentFamily = object.getString("agentFamily");
userRequest.agentGender = object.getString("agentGender");
userRequest.datetimerequest = object.getLong("datetimerequest");
userRequest.usertoagentLevelofProsperity = object.getInt("usertoagentLevelofProsperity");
userRequest.companyName = object.getString("company_name");
userRequest.fieldinsurance = object.getString("fieldinsurance");
userRequest.description = object.getString("description");
userRequest.statusrequestagent = object.getInt("statusrequestagent");
userRequest.statusrequestuser = object.getInt("statusrequestuser");
userRequest.behavior = object.getInt("behavior");
userRequest.howprovide = object.getInt("howprovide");
userRequest.insuranceinformation = object.getInt("insuranceinformation");
userRequest.unobtrusiveservices = object.getInt("unobtrusiveservices");
userRequest.priceinsuser = object.getInt("priceinsuser");
userRequest.paymentstatus = object.getInt("paymentstatus");
userRequest.msgcount = object.getString("msg_count");
userreguest.add(userRequest);
}
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {e.printStackTrace();
}
G.getHandler().post(new Runnable() {
@Override
public void run() {
UserRequestList.setVisibility(View.VISIBLE);
UserRequestAdapter.notifyDataSetChanged();
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
private String streamToString(InputStream inputStream) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuffer = new StringBuilder();
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line).append("\n");
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return stringBuffer.toString();
}
@Override
public void onBackPressed() {
Intent inten= new Intent(G.getCurrentActivity(),InsurancefieldActivity.class);
G.getCurrentActivity().startActivity(inten);
G.getCurrentActivity().finish();
}
}
}
}
public class ActivityUserRequest extends UAppCompatActivity {
private RecyclerView UserRequestList;
private RecyclerUserRequestList UserRequestAdapter;
private ArrayList<StructUserRequest> userreguest = new ArrayList<StructUserRequest>();
private int userid=G.setting.getInt("user_id",0);
private String data = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_request_list);
UserRequestList = (RecyclerView) findViewById(R.id.listRequest);
UserRequestList.setLayoutManager(new LinearLayoutManager(this));
UserRequestAdapter = new RecyclerUserRequestList(userreguest);
UserRequestList.setAdapter(UserRequestAdapter);
populateRequestFromServer();
}
private void populateRequestFromServer() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String url = "http://"+ G.IP+"/userrequest.php";
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("command", "read"));
params.add(new BasicNameValuePair("filter", "user_id="+userid));
try {
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, 2000);
HttpConnectionParams.setSoTimeout(httpParams, 1000);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(url);
request.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = client.execute(request);
data = streamToString(httpResponse.getEntity().getContent());
Log.i("LOG","data: "+data);
if (data != null) {
try {
userreguest.clear();
JSONArray apps = new JSONArray(data);
for (int i = 0; i < apps.length(); i++) {
JSONObject object = apps.getJSONObject(i);
StructUserRequest userRequest = new StructUserRequest();
userRequest.companyName = object.getString("company_name");
//........//
userreguest.add(userRequest);
}
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {e.printStackTrace();
}
G.getHandler().post(new Runnable() {
@Override
public void run() {
UserRequestList.setVisibility(View.VISIBLE);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
private String streamToString(InputStream inputStream) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuffer = new StringBuilder();
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line).append("\n");
}
}
catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return stringBuffer.toString();
}
}
حقوق مادی و معنوی تمامی آثار و محتویات عرضه شده در این وب سایت، متعلق به شرکت «فوژان رسانه ایده هوشمند» و پدیدآورندگان آثار بوده و حسب مورد دارای مجوز از مراجع ذی صلاح می باشد.
کپی برداری از مطالب این سایت حتی با ذکر منبع جایز نیست.