Android 如何在recyclerview下的进度栏中显示更多数据

Android 如何在recyclerview下的进度栏中显示更多数据,android,Android,我想要一个recyclerview,当第一个应用程序打开时,然后在创建时从服务器获取一些数据,当向上滚动时,会显示recyclerview下方的进度条,当向上滚动到服务器时,再次点击URL,并在先前获取的数据下方获取更多数据。但正确知道当我第二次点击URL时,它刷新页面并仅显示从服务器获取的数据服务器在第二次命中,但我想要第一次和第二次命中的响应 对不起,我说英语 以下是我的主要活动代码: public class MainActivity extends AppCompatActivity {

我想要一个recyclerview,当第一个应用程序打开时,然后在创建时从服务器获取一些数据,当向上滚动时,会显示recyclerview下方的进度条,当向上滚动到服务器时,再次点击URL,并在先前获取的数据下方获取更多数据。但正确知道当我第二次点击URL时,它刷新页面并仅显示从服务器获取的数据服务器在第二次命中,但我想要第一次和第二次命中的响应

对不起,我说英语

以下是我的主要活动代码:

public class MainActivity extends AppCompatActivity {

public static String m_DealListingURL = "http://192.163.0.110:8080/ireward/rest/json/metallica/getDealListInJSON";
public static String s_szresult = " ";
public CJsonsResponse m_oJsonsResponse;
public int[] m_n_FormImage;
public String sz_RecordCount, sz_LastCount;
public int m_n_DefaultRecordCount = 5;// intiallly record count is 5.
public int m_n_DeafalutLastCount = 0;//initally lastcount is 0.
boolean isFirstTime;
private Toolbar mToolbar;
private RecyclerView mRecyclerView;
private List<User> mUsers = new ArrayList<>();
private UserAdapter mUserAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    mToolbar.setTitle("LoadMoreRecycleView");

    isFirstTime = true;
    //..............sending first hit ..................................
    new CDealDataSent().execute(m_DealListingURL);
    mRecyclerView = (RecyclerView) findViewById(R.id.recycleView);
    sz_RecordCount = String.valueOf(m_n_DefaultRecordCount);// increment of record count
    sz_LastCount = String.valueOf(m_n_DeafalutLastCount);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mUserAdapter = new UserAdapter();
    mRecyclerView.setAdapter(mUserAdapter);
    // Getting the string array from strings.xml
    m_n_FormImage = new int[]{
            R.drawable.amazon,
            R.drawable.whatsapp,
            R.drawable.zorpia,
            R.drawable.path,
            R.drawable.app_me,
            R.drawable.evernote,
            R.drawable.app_me};
    mUserAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
        @Override
        public void onLoadMore() {
            Log.e("haint", "Load More");
            mUsers.add(null);
            mUserAdapter.notifyItemInserted(mUsers.size() - 1);

           //Load more data for reyclerview
            new Handler().postDelayed(new Runnable() {
                //                    @Override
                public void run() {
                    Log.e("haint", "Load More 2");

                    mUsers.remove(mUsers.size() - 1);
                    mUserAdapter.notifyItemRemoved(mUsers.size());

                    m_n_DefaultRecordCount = m_n_DefaultRecordCount + 5;
                    m_n_DeafalutLastCount = m_n_DeafalutLastCount + 5;

                    sz_RecordCount = String.valueOf(m_n_DefaultRecordCount);
                    sz_LastCount = String.valueOf(m_n_DeafalutLastCount);

                    //...........sending second hit ./.................
                    new DealNext().execute(m_DealListingURL);

                    mUserAdapter.setLoaded();
                }
            }, 5000);
        }
    });
}
public String DealListing(String url, CRegistrationDataStorage login) {
    //sending deal data to retreive response from server

    InputStream inputStream = null;
    m_oJsonsResponse = new CJsonsResponse();
    try {
        // 1. create HttpClient
        HttpClient httpclient = new DefaultHttpClient();
        // 2. make POST request to the given URL
        HttpPost httpPost = new HttpPost(url);
        String json = "";
        // 3. build jsonObject
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("agentCode", "9555517456");
        jsonObject.put("pin", "05E0901648FD6439207FA74FC3E07734");
        jsonObject.put("recordcount", sz_RecordCount);
        jsonObject.put("lastcountvalue", sz_LastCount);
        //jsonObject.put("emailId", "nirajk1190@gmail.com");
        // 4. convert JSONObject to JSON to String
        json = jsonObject.toString();
        // 5. set json to StringEntity
        StringEntity se = new StringEntity(json);
        // 6. set httpPost Entity
        httpPost.setEntity(se);
        // 7. Set some headers to inform server about the type of the content
        httpPost.setHeader("Content-type", "application/json");
        // 8. Execute POST request to the given URL
        HttpResponse httpResponse = httpclient.execute(httpPost);
        HttpEntity entity = httpResponse.getEntity();
        // 9. receive response as inputStream
        inputStream = entity.getContent();
        System.out.println("InputStream....:" + inputStream.toString());
        System.out.println("Response....:" + httpResponse.toString());

        StatusLine statusLine = httpResponse.getStatusLine();
        System.out.println("statusLine......:" + statusLine.toString());
        ////Log.d("resp_body", resp_body.toString());
        int statusCode = statusLine.getStatusCode();
        // 10. convert inputstream to string
        if (statusCode == 200) {
            // 10. convert inputstream to string
            if (inputStream != null)
                s_szresult = m_oJsonsResponse.convertInputStreamToString(inputStream);
            //String resp_body =
            EntityUtils.toString(httpResponse.getEntity());
        } else
            s_szresult = "Did not work!";
    } catch (Exception e) {
        Log.d("InputStream", e.getLocalizedMessage());
    }
    System.out.println("resul.....:" + s_szresult);
    // 11. return s_szResult
    return s_szresult;
}
static class UserViewHolder extends RecyclerView.ViewHolder {
    public TextView tvName;
    public TextView tvEmailId;
    public ImageView appImage;

    public UserViewHolder(View itemView) {
        super(itemView);
        tvName = (TextView) itemView.findViewById(R.id.tvName);
        appImage = (ImageView) itemView.findViewById(R.id.appImage);
        tvEmailId = (TextView) itemView.findViewById(R.id.tvEmailId);
    }
}
static class LoadingViewHolder extends RecyclerView.ViewHolder {
    public ProgressBar progressBar;

    public LoadingViewHolder(View itemView) {
        super(itemView);
        progressBar = (ProgressBar) itemView.findViewById(R.id.progressBar1);
    }
}

class CDealDataSent extends AsyncTask<String, Void, String> {
    //  sending first hit to server ........................................
    public JSONObject m_oResponseobject;
    public ProgressDialog m_PDialog;
    public CRegistrationDataStorage oRegisterStorage;
    public User item;

    //      @Override
    protected void onPreExecute() {
        super.onPreExecute();
        m_PDialog = new ProgressDialog(MainActivity.this);
        m_PDialog.setMessage("Please wait while Loading Deals...");
        m_PDialog.setCancelable(false);
        m_PDialog.show();
    }

    @Override
    protected String doInBackground(String... urls) {
        return DealListing(urls[0], oRegisterStorage);// sending data to server...

    }

    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(String result) {

        m_PDialog.dismiss();
        try {
            m_oResponseobject = new JSONObject(result);// getting response from server
            final JSONArray posts = m_oResponseobject.optJSONArray("dealList");

            mUsers = new ArrayList<User>();
            for (int i = 0; i < posts.length(); i++) {
                JSONObject post = posts.getJSONObject(i);
                item = new User();
                item.setName(post.getString("dealname"));
                item.setEmail(post.getString("dealcode"));
                item.setImage(m_n_FormImage[i]);
                mUsers.add(item);

            }
            getResponse();

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

    public void getResponse() throws JSONException {
        if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Transaction Successful")) {

            mUserAdapter = new UserAdapter();//creating object of adapter and addd setting odata to adapter for use.
            mRecyclerView.setAdapter(mUserAdapter);//adding adapter to recyclerview
        } else if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Connection Not Available")) {
            Toast.makeText(MainActivity.this, "Connection not avaliable", Toast.LENGTH_SHORT).show();
        }

    }

}

//  sending second time hit  to server..................................
//  ...................................................................................
private class DealNext extends AsyncTask<String, Void, String> {
    public JSONObject m_oResponseobject;
    public CRegistrationDataStorage oRegisterStorage;
    public User item;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected String doInBackground(String... urls) {
        //My Background tasks are written here

        synchronized (this) {

            return DealListing(urls[0], oRegisterStorage);
        }
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        try {
            m_oResponseobject = new JSONObject(result);// getting response from server
            if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Deal List Not Found"))
                return;
            final JSONArray posts = m_oResponseobject.optJSONArray("dealList");
            if (isFirstTime) {
                mUsers = new ArrayList<User>();
                isFirstTime = false;
            } else {
                mUsers.remove(mUsers.size() - 1);
                mUserAdapter.notifyItemRemoved(mUsers.size());
            }
            for (int i = 0; i < posts.length(); i++) {
                JSONObject post = posts.getJSONObject(i);
                item = new User();
                item.setName(post.getString("dealname"));
                item.setEmail(post.getString("dealcode"));
                item.setImage(m_n_FormImage[i]);
                mUsers.add(item);
            //                  m_oAdapter.notifyDataSetChanged();
                mUserAdapter.notifyItemInserted(mUsers.size());
                mUserAdapter.setLoaded();

            }
            if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Transaction Successful")) {

                mUserAdapter = new UserAdapter();//creating object of adapter and addd setting odata to adapter for use.
                mRecyclerView.setAdapter(mUserAdapter);//adding adapter to recyclerview
            } else if (m_oResponseobject.getString("resultdescription").equalsIgnoreCase("Connection Not Available")) {
                Toast.makeText(MainActivity.this, "Connection not avaliable", Toast.LENGTH_SHORT).show();
            }


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

class UserAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private final int VIEW_TYPE_ITEM = 0;
    private final int VIEW_TYPE_LOADING = 1;

    private OnLoadMoreListener mOnLoadMoreListener;

    private boolean isLoading;
    private int visibleThreshold = 5;
    private int lastVisibleItem, totalItemCount;

    public UserAdapter() {
        final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
        mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();

                if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    if (mOnLoadMoreListener != null) {
                        mOnLoadMoreListener.onLoadMore();

                    }
                    isLoading = true;


                }
            }
        });
    }

    public void setOnLoadMoreListener(OnLoadMoreListener mOnLoadMoreListener) {
        this.mOnLoadMoreListener = mOnLoadMoreListener;
    }

    @Override
    public int getItemViewType(int position) {
        return mUsers.get(position) == null ? VIEW_TYPE_LOADING : VIEW_TYPE_ITEM;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == VIEW_TYPE_ITEM) {
            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_user_item, parent, false);
            return new UserViewHolder(view);
        } else if (viewType == VIEW_TYPE_LOADING) {
            View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_loading_item, parent, false);
            return new LoadingViewHolder(view);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof UserViewHolder) {
            User user = mUsers.get(position);
            UserViewHolder userViewHolder = (UserViewHolder) holder;
            userViewHolder.tvName.setText(user.getName());
            userViewHolder.tvEmailId.setText(user.getEmail());
            userViewHolder.appImage.setImageResource(user.getImage());
        } else if (holder instanceof LoadingViewHolder) {
            LoadingViewHolder loadingViewHolder = (LoadingViewHolder) holder;
            loadingViewHolder.progressBar.setIndeterminate(true);
        }
    }

    @Override
    public int getItemCount() {
        return mUsers == null ? 0 : mUsers.size();
    }

    public void setLoaded() {
        isLoading = false;
    }
}
public类MainActivity扩展了AppCompatActivity{
公共静态字符串m_DealListingURL=”http://192.163.0.110:8080/ireward/rest/json/metallica/getDealListInJSON";
公共静态字符串s_szresult=“”;
公共CJsonsResponse m_OJSONS Response;
公共int[]m_n__FormImage;
公共字符串sz_RecordCount,sz_LastCount;
public int m_n_DefaultRecordCount=5;//初始记录计数为5。
public int m_n_deaflutlastcount=0;//初始lastcount为0。
布尔值是第一次;
私有工具栏mToolbar;
私人回收视图mRecyclerView;
私有列表mUsers=newarraylist();
专用用户适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar=(工具栏)findviewbyd(R.id.Toolbar);
mToolbar.setTitle(“LoadMoreRecycleView”);
isFirstTime=true;
//发送第一次点击。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
新建CDealDataSent().execute(m_DealListingURL);
mRecyclerView=(RecyclerView)findViewById(R.id.recycleView);
sz_RecordCount=String.valueOf(m_n_DefaultRecordCount);//记录计数的增量
sz_LastCount=String.valueOf(m_n_deaflutlastcount);
mRecyclerView.setLayoutManager(新的LinearLayoutManager(this));
mUserAdapter=newuseradapter();
mrecycerview.setAdapter(mUserAdapter);
//从strings.xml获取字符串数组
m_n_FormImage=新整数[]{
R.drawable.amazon,
R.drawable.whatsapp,
R.drawable.zorpia,
R.drawable.path,
R.drawable.app\u me,
R.drawable.evernote,
R.drawable.app_me};
setOnLoadMoreListener(新的OnLoadMoreListener()){
@凌驾
public void onLoadMore(){
Log.e(“haint”,“加载更多”);
添加(空);
mUserAdapter.notifyItemInserted(mUsers.size()-1);
//为ReyclView加载更多数据
new Handler().postDelayed(new Runnable()){
//@覆盖
公开募捐{
Log.e(“haint”,“加载更多2”);
移除(mUsers.size()-1);
mUserAdapter.notifyItemRemoved(mUsers.size());
m_n_DefaultRecordCount=m_n_DefaultRecordCount+5;
m_n_deaflutlastcount=m_n_deaflutlastcount+5;
sz_RecordCount=String.valueOf(m_n_DefaultRecordCount);
sz_LastCount=String.valueOf(m_n_deaflutlastcount);
//发送第二次点击。。。。。。。。。。。。。。。。。
new DealNext().execute(m_DealListingURL);
mUserAdapter.setLoaded();
}
}, 5000);
}
});
}
公共字符串DealListing(字符串url、凭据数据存储登录){
//正在发送交易数据以从服务器检索响应
InputStream InputStream=null;
m_oJsonsResponse=新的CJsonsResponse();
试一试{
//1.创建HttpClient
HttpClient HttpClient=新的DefaultHttpClient();
//2.向给定URL发出POST请求
HttpPost HttpPost=新的HttpPost(url);
字符串json=“”;
//3.构建jsonObject
JSONObject JSONObject=新的JSONObject();
jsonObject.put(“代理代码”,“9555517456”);
jsonObject.put(“pin”,“05E0901648FD6439207FA74FC3E07734”);
jsonObject.put(“记录计数”,sz_记录计数);
jsonObject.put(“lastcountvalue”,sz_LastCount);
//jsonObject.put(“emailId”nirajk1190@gmail.com");
//4.将JSONObject转换为JSON转换为字符串
json=jsonObject.toString();
//5.将json设置为StringEntity
StringEntity se=新的StringEntity(json);
//6.设置httpPost实体
httpPost.setEntity(se);
//7.设置一些标题以通知服务器内容的类型
setHeader(“内容类型”、“应用程序/json”);
//8.对给定URL执行POST请求
HttpResponse HttpResponse=httpclient.execute(httpPost);
HttpEntity entity=httpResponse.getEntity();
//9.将响应作为inputStream接收
inputStream=entity.getContent();
System.out.println(“InputStream…”:“+InputStream.toString());
System.out.println(“响应:”+httpResponse.toString());
StatusLine StatusLine=httpResponse.getStatusLine();
System.out.println(“statusLine……”:“+statusLine.toString());
////Log.d(“resp_body”,resp_body.toString());
int statusCode=statusLine.getStatusCode();
//10.将inputstream转换为字符串
如果(状态代码==200){
//10.将inputstream转换为字符串
如果(inputStream!=null)
s_szresult=m_oJsonsResponse.convertInputStreamToString(inputStream);
//字符串响应体=
toString(httpResponse.getEntity());
}否则
s_szresult=“不起作用!”;
}捕获(例外e){
d(“InputStream”,例如getLocalizedMessage());
}
System.out.println(“结果…:”+s_szresult);
//11.返回s_szResult
返回s_szresult;
}
静态类UserViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图tvName;
公共文本视图TVMailID;
公共图像查看appImage;
公共用户视图持有者(视图项视图){