2017-06-19 82 views
0

Android的XML活动使用SwipeRefreshLayout无法刷新JSON数据在Android中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffffff" 
    android:orientation="vertical"> 

       <android.support.v4.widget.SwipeRefreshLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/swipe_refresh_layout" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 

       <android.support.v7.widget.RecyclerView 
        android:id="@+id/recyclerview" 
        android:layout_width="match_parent" 
        android:layout_height="0dp" 
        android:layout_marginTop="10dp"> 

       </android.support.v7.widget.RecyclerView> 
       </android.support.v4.widget.SwipeRefreshLayout> 

</LinearLayout> 

的Android Activty Java代码的

public class Sample extends AppCompatActivity { 
    private static final String URL_DATA = "http://uat.ziplife.in/mobileapp/home_post_service.php"; 

    LinearLayout linearLayout; 
    private RecyclerView recyclerView; 
    private RecyclerView.Adapter adapter; 

    private SwipeRefreshLayout swipeRefreshLayout; 
    private List<Data_SAerver> data_sAervers; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.recyclerview); 
     swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); 

     swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       swipeRefreshLayout.setRefreshing(true); 
loadRecyclerViewData(); 
      } 


     }); 

     swipeRefreshLayout.setColorScheme(
       android.R.color.holo_blue_bright, 
       android.R.color.holo_green_light, 
       android.R.color.holo_orange_light, 
       android.R.color.holo_red_light); 

     linearLayout = (LinearLayout) findViewById(R.id.linaralayout1); 

     linearLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Sample.this, Posts_DATA.class); 
       startActivity(i); 
      } 
     }); 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     data_sAervers = new ArrayList<>(); 

     loadRecyclerViewData(); 

    } 

    private void loadRecyclerViewData() { 
     final ProgressDialog progressDialog = new ProgressDialog(this); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.show(); 


     StringRequest stringRequest = new StringRequest(Request.Method.GET, URL_DATA, 

       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String s) { 
         progressDialog.dismiss(); 
         String filename = ""; 
         String filetype = ""; 

         try { 
          JSONObject jsonObject = new JSONObject(s); 
          JSONArray posts = jsonObject.getJSONArray("posts"); 
          if (posts != null && posts.length() > 0) { 
           for (int i = 0; i < posts.length(); i++) { 
            JSONObject fileObj = posts.getJSONObject(i); 

            String fName = fileObj.getString("firstname"); 
            String created_at = fileObj.getString("created_at"); 
            String post_desc = fileObj.getString("post_desc"); 


            Log.e("Details", fName + "" + created_at + "" + post_desc); 

            JSONArray files = fileObj.getJSONArray("files"); 
            if (files != null && files.length() > 0) { 
             for (int j = 0; j < files.length(); j++) { 
              JSONObject Jsonfilename = files.getJSONObject(j); 
              filename = Jsonfilename.getString("file_name"); 
              filetype = Jsonfilename.getString("file_type"); 

              if (filetype.equalsIgnoreCase("2")) { 
               filename = "http://uat.ziplife.in/img/Post/convert/" + filename; 
              } else if(filetype.equalsIgnoreCase("1")) 
              { 
               filename = "http://uat.ziplife.in/img/Post/compress/" + filename; 
              } 

              Log.e("Files", "" + filename); 
             } 
            } else 

            { 
             filename = ""; 
             filetype = ""; 
            } 

            Data_SAerver item = new Data_SAerver(fName, created_at, post_desc, filename, filetype 
            ); 
            data_sAervers.add(item); 
           } 

          // swipeRefreshLayout.setRefreshing(false); 
          } 

          adapter = new MyAdapter(data_sAervers, getApplicationContext()); 

          swipeRefreshLayout.setRefreshing(false); 
          recyclerView.setAdapter(adapter); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 



        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       progressDialog.dismiss(); 

       Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); 
       // stopping swipe refresh 
       swipeRefreshLayout.setRefreshing(false); 
      } 

     }); 


     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 


} 

我无法用SwipeRefreshLayout以刷新recyclerView JSON数据。当我拉下滚动但没有发生新的数据不会获取。 我的代码中有什么错误?

+0

请在此处添加您的json数据。这将帮助我们更清楚地找出解决方案。 –

回答

0

试试这个。

adapter = new MyAdapter(data_sAervers,Sample.this); 
recyclerView.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 
mSwipeRefreshLayout.setRefreshing(false); 
+0

你可以在我的代码中添加这个代码: –

+0

你缺少这一行,adapter.notifyDataSetChanged(); – GParekar

+0

可以在代码中添加此代码请问@GParekar –