2017-02-22 2 views
0

を通してステップは現在、私は、アプリケーションを実行するとするときにログインしたときにリサイクルビューはデータを示して更新します。アプリケーションを再コンパイルして、再度実行しますが、別の人物でログインしている場合は、前の人のデータが示されています。データのみが正しく

これは、APIトークン呼び出しが行われた後でもあります。しかし、デバッガを使用してステップスルーすると、デバッガは正しい情報を表示します。アプリケーションを実行すると、正しい情報が表示されます。

私は正しいデータを表示するために私のアプリケーションのためにデバッガを踏んでいく必要があります。

ここはフラグメントです。

public class allFragment extends Fragment { 


private RecyclerView usersListView; 


ArrayList<MessageData> arrMessageData; //= new ArrayList<MessageData>(); 


allRecyclerViewAdapter adapter; 

SwipeRefreshLayout refreshLayout; 

ProgressDialog pd; 


public allFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    new Load().execute(null, null, null); 


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_all, container, false); 

    usersListView = (RecyclerView) rootView.findViewById(R.id.allListView); 


    pd = ProgressDialog.show(getActivity(), "Loading messages", 
      "Loading...", true); 

    //new Load().execute(null, null, null); 

    refreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.swipeRefreshLayout); 

    refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      // Your code to refresh the list here. 
      // Make sure you call swipeContainer.setRefreshing(false) 
      // once the network request has completed successfully. 
      new Load().execute(null, null, null); 
     } 
    }); 



    return rootView; 

} 

class Load extends AsyncTask<Void, Void, Void> { 

    ProgressDialog pd; 

    private Context context; 

    @Override 
    protected Void doInBackground(Void... params) { 


     OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new BasicAuthInterceptor()).addNetworkInterceptor(new StethoInterceptor()).build(); 



     SharedPreferences settings = PreferenceManager 
       .getDefaultSharedPreferences(getActivity()); 
     String auth_token_string = settings.getString("token", ""/*default value*/); 
     String auth_token_type = settings.getString("tokenType", ""); 
     String userId = settings.getString("userId", ""); 

     Log.i("prefs", auth_token_string); 


     String url = "https://vitalengine.com/portal-api/api/user/inbox/list?userId=" + 
       userId + 
       "&folderId=-1&tagId=0&page=1&itemPerPage=1000&showMsgInFolder=false"; 


     Request request = new Request.Builder().url(url) 
       .addHeader("Authorization", auth_token_type + " " + auth_token_string) 
       .addHeader("user-tz", "-330") 
       //.addHeader("Content-Type", "application/json") 
       .build(); 


     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       // Log.i(TAG, "call api error"); 
       Log.e("Volley", e.toString()); 
      } 

      @Override 
      public void onResponse(Call call, okhttp3.Response response) { 

       try { 
        if (!response.isSuccessful()) 
         throw new IOException("Unexpected code " + response); 
        final String body = response.body().string(); 


        JSONObject Jobject = new JSONObject(body); 


        JSONObject sub = Jobject.getJSONObject("response"); 
        JSONArray Jarray = sub.getJSONArray("inboxMsgList"); 

        Log.e("Array", String.valueOf(Jarray.length())); 

        arrMessageData = new ArrayList<>(); 

        int i = 0; 
        Log.i("Orginal Count ", "All: " + Jarray.length()); 
        while (i < Jarray.length()) { 

         // for (i = 0; i < Jarray.length(); i++) { 
         JSONObject object = Jarray.getJSONObject(i); 


         MessageData msg3 = new MessageData(); 
         msg3.setName((String) object.get("fromUser")); 
         msg3.setMessage((String) object.get("message")); 
         // added null check 
         //if (object.getString("toUser").equals(null)) 
          msg3.setToUser(object.getString("toUser")); 

         msg3.setRead((Integer) object.get("isRead")); 
         msg3.setPhotoURL((String) object.get("photo")); 


         if (object.get("messageType").equals("CONVERSATION")) { 
          msg3.setType("conversation"); 

          msg3.setSubject((String) object.get("subject")); 
          msg3.setId((Integer) object.get("conversationId")); 

         } else if (object.get("messageType").equals("MESSAGE")) { 
          msg3.setType("message"); 
          msg3.setId((Integer) object.get("conversationId")); 
          msg3.setType((String) object.get("messageType")); 

          // added message type referral. 
         } else if (object.get("messageType").equals("REFERRALS")) { 
          msg3.setType("referral"); 
          msg3.setPatient((String) object.get("patient")); 
          msg3.setId((Integer) object.get("referralId")); 
         } 

         arrMessageData.add(msg3); 
         handler.sendEmptyMessage(1); 
         i++; 
        } 
        Log.i("Expected Count ", "All: " + arrMessageData.size()); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

      } 


     }); 
     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd = new ProgressDialog(getActivity()); 
     pd.setMessage("loading"); 
     pd.show(); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     if (pd != null) { 
      pd.dismiss(); 
     } 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    new Load().execute(null, null, null); 
} 

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
      case 1: 
       adapter = new allRecyclerViewAdapter(getActivity().getBaseContext(), arrMessageData); 
       usersListView.setAdapter(adapter); 
       LinearLayoutManager layoutManager 
         = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false); 
       usersListView.setLayoutManager(layoutManager); 

       refreshLayout.setRefreshing(false); 

       pd.dismiss(); 
       break; 
      default: 
       Log.d("TAG", msg.what + " ? "); 
       break; 
     } 
    } 
}; 

}

答えて

1

LoadAsyncTaskで、バックグラウンドスレッドで実行されている、AsyncTasksのdoBackground()refreshLayout.onRefresh()が呼び出された時点で終了するという保証はありません。

代わりに、LoadタスクのonPostExecute()方法でrefreshLayoutを更新します。

関連する問題