2017-08-12 94 views
-2

我试图从服务器上下载的案件清单,然后填充一个ArrayList在我RecyclerView适配器但每次使用它我尝试填充来自的AsyncTask数组列表我可以打印数据中的每一步从填充bu而不是从我使用的Arraylist(我试图存储在包含我创建的类型的对象的arrayList)我不能对象添加到一个ArrayList

这是有问题的代码 这是我的AsyncTask ... `

public class downloadingNewCases extends AsyncTask<Void,Void ,Boolean>{ 
     private String userid ; 
     private String state ; 
     public downloadingNewCases(String userid ,String state){ 
      this.userid = userid ; 
      this.state = state ; 
     } 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    Log.d(AppController.DEBUG, "download New Cases Started"); 
} 
@Override 
protected Boolean doInBackground(Void... params){ 
    Log.d(AppController.DEBUG , "user id in the get cases link.." + userid); 
    String url = AppController.ApiUrl + "GetCases?UserName="+ userid +"&stat="+state; 
    Log.d(AppController.DEBUG_LINK,url); 
try { 
JsonArrayRequest request = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
    @Override 
    public void onResponse(JSONArray response) { 
     Log.d("TEST", String.valueOf(response.length())); 
     for (int i = 0; i < response.length(); i++) { 
      try { 
       Log.d("TEST","downloading data"); 
       JSONObject object = response.getJSONObject(i); 
       JSONArray specs = object.getJSONArray("Spe"); 
       ArrayList<Specialities> spe = new ArrayList<>(); 
       for (int j = 0; j < specs.length(); j++) { 
        Log.d("TEST",specs.getJSONObject(j).getString("SName")); 
        spe.add(new Specialities(null, specs.getJSONObject(j).getString("SName"))); 
       } 
       Case ca = new Case(object.getString("ID") 
         , object.getString("Serial") 
         , object.getString("Name") 
         , object.getString("gender") 
         , object.getString("Age") 
         , object.getString("NatioanlityID") 
         , object.getString("HealthProblem") 
         , object.getString("CityID") 
         , object.getString("Problem") 
         , object.getString("Date") 
         , object.getString("Status") 
         , spe); 

       Log.d("TEST",ca.toString()); 

       cases.add(ca); 
       spe.clear(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError volleyError) { 
     Log.d(AppController.DEBUG , volleyError.toString()); 

    } 
}); 
request.setRetryPolicy(new DefaultRetryPolicy(
     0, 
     DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
     DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
MySingleton.getmInstance(getActivity()).addToRequestQueue(request); 

}catch (Exception e){ 
Log.d(AppController.DEBUG,"error in the asynctask in the new cases freagment... "); 
Log.d(AppController.DEBUG ,e.toString()); 
} 
    Log.d(AppController.DEBUG, "Cases size ::" + cases.size()); 
    return true; 
} 
@Override 
protected void onPostExecute(Boolean bool) { 
    super.onPostExecute(bool); 

/* if(listener != null){ 
     listener.getCases(cases); 
    }*/ 
    adapter.notifyDataSetChanged(); 
// Log.d(AppController.DEBUG, "new Cases Downloaded..."); 


} 

} ` (我确定适配器和回收站的视图代码是正确的,因为我现在可以使用相同的代码,但是当我再次测试它时,它不再工作,我不记得我是否改变了某些东西它或没有 - 我想不会)..

这是我onViewCreate方法。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.doctor_new_cases_fragment,container,false); 
    Log.d(AppController.DEBUG_SHARED,"userID in the new case activity ..." + userID); 
    SharedPreferences prefs = getActivity().getSharedPreferences(AppController.PREFERENCES_NAME , Context.MODE_PRIVATE); 
    userID = prefs.getString(DoctorProfileSubmitActivity.Shared_userid,null) ; 
    downloadingNewCases tast = new downloadingNewCases(userID ,""); 
    tast.execute(); 

    recyclerView = (RecyclerView)view.findViewById(R.id.recyclervew_new_cases); 
    adapter = new CasesAdapter(view.getContext(), cases); 
    recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    recyclerView.setAdapter(adapter); 

    ViewGroup parent = (ViewGroup) view.getParent(); 
    if (parent != null){ 
     parent.removeView(view); 
    } 
    return view; 
} 

最后数组列表被声明为类的实例变量(类扩展片段+它是我使用我认为寻呼机作为用于我的选项卡式活性的标签布局的片段。) 这里的ArrayList的声明

private final ArrayList<Case> cases = new ArrayList<>(); 
+0

你是说这种情况是空的,你的适配器什么都不显示? – santalu

+0

你为什么试图在Asynctask里面抽空? –

+0

@ cricket_007是否包含问题? 我认为最好是在AsyncTask中实现它,所以我不必在UI线程上执行那种东西+我可以稍后添加我的进度条 如果有更好的方法请告诉我+告诉这个实现有什么问题 –

回答

0

对不起你们这是不值得的网站上添加一个问题马上 我解决了这一问题。 (看来我的问题是在这里)

Case ca = new Case(object.getString("ID") 
         , object.getString("Serial") 
         , object.getString("Name") 
         , object.getString("gender") 
         , object.getString("Age") 
         , object.getString("NatioanlityID") 
         , object.getString("HealthProblem") 
         , object.getString("CityID") 
         , object.getString("Problem") 
         , object.getString("Date") 
         , object.getString("Status") 
         , spe); 

我意外更改object.getString( “性别”),以object.getString( “性别”) 这引起了我JSONException。

我解决了这个问题,一切都重新开始。

感谢您的帮助,我很抱歉,如果我冲到第一问的问题没有正确的调试会话。

0

既然你说你可以打印的每一步,该问题可能是不相关的数据资料。问题可能是您的Arraylist案例和您的CaseAdapter。

让我们尝试一个简单的测试,而不是用对象的情况下填写您的适配器,创建字符串的一个新的ArrayList,并与您的object.getString(“名称”)填补它的响应。然后改变你的oncreateview来显示这个使用普通字符串arrayadapter的名字列表。

如果能够成功显示的名字时,这意味着该错误是在你的情况和caseadapter,你必须表现出更多的代码为我们提供帮助。

相关问题