Android 无休止的recyclerview安卓升级版2

Android 无休止的recyclerview安卓升级版2,android,android-recyclerview,retrofit2,Android,Android Recyclerview,Retrofit2,我是android新手。我遇到了问题,我不知道如何在我的项目中添加无休止的recyclerview。下面是我的项目代码。现在,在我的recyclerview中,我可以使用改型2从服务器获取JSON 这是适配器 public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> { private ArrayList<Rec> recs; public DataAdapter(Ar

我是android新手。我遇到了问题,我不知道如何在我的项目中添加无休止的recyclerview。下面是我的项目代码。现在,在我的recyclerview中,我可以使用改型2从服务器获取JSON

这是适配器

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {


private ArrayList<Rec> recs;

public DataAdapter(ArrayList<Rec> recs) {
    this.recs = recs;
}


@Override
public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card_row, viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(final DataAdapter.ViewHolder viewHolder,final int i) {
    String decode ="^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";

    viewHolder.tv_link.setText(recs.get(i).getLink());
    viewHolder.imageText.setText(recs.get(i).getImage());

    Bitmap bmimage = null;
    if(recs.get(i).getImage().toString().matches(decode)) {
        byte[] imageByteArray = decodeImage(recs.get(i).getImage().toString());
        bmimage = BitmapFactory.decodeByteArray(imageByteArray, 0,
                imageByteArray.length);
        viewHolder.image.setImageBitmap(bmimage);
    }
        else {
        Picasso.with(viewHolder.imageText.getContext()).load(recs.get(i).getImage()).fit().centerInside() .into(viewHolder.image);
    }
}

@Override
public int getItemCount() {
    return recs.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{

    private TextView tv_id,tv_title,tv_link,imageText,body;
    private ImageView image;
    public ViewHolder(View view) {
        super(view);




        tv_link = (TextView)view.findViewById(R.id.tv_link);
        imageText = (TextView)view.findViewById(R.id.imageText);
        image = (ImageView)view.findViewById(R.id.image);


        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(view.getContext(), PromotionDetails.class);

                intent.putExtra("link", tv_link.getText().toString());

                view.getContext().startActivity(intent);



            }
        });
    }



}
公共类DataAdapter扩展了RecyclerView.Adapter{
私人阵列列表记录;
公共数据适配器(ArrayList recs){
this.recs=recs;
}
@凌驾
public DataAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.card_行,viewGroup,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(final DataAdapter.ViewHolder ViewHolder,final int i){
String decode=“^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$”;
viewHolder.tv_link.setText(recs.get(i.getLink());
viewHolder.imageText.setText(recs.get(i.getImage());
位图bmimage=null;
if(recs.get(i).getImage().toString()匹配(解码)){
字节[]imageByteArray=解码图像(recs.get(i).getImage().toString());
bmimage=BitmapFactory.decodeByteArray(imageByteArray,0,
imageByteArray.length);
viewHolder.image.setImageBitmap(bmimage);
}
否则{
Picasso.with(viewHolder.imageText.getContext()).load(recs.get(i.getImage()).fit().centerInside()加载到(viewHolder.image)中;
}
}
@凌驾
public int getItemCount(){
返回recs.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图tv_id、tv_标题、tv_链接、imageText、正文;
私有图像查看图像;
公共视图持有者(视图){
超级(视图);
tv_link=(TextView)view.findviewbyd(R.id.tv_link);
imageText=(TextView)view.findViewById(R.id.imageText);
image=(ImageView)view.findviewbyd(R.id.image);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent Intent=新意图(view.getContext(),PromotionDetails.class);
intent.putExtra(“link”,tv_link.getText().toString());
view.getContext().startActivity(intent);
}
});
}
}
}

下面是我的活动课

    public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private ArrayList<Rec> data;
    private DataAdapter adapter;
    private Button BtnHistory,BtnBiller,BtnPromo;
    private static final long CACHE_SIZE = 10 * 1024 * 1024;
    float x1,x2;
    float y1, y2;


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


        BtnHistory.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Context context = getApplicationContext();
                CharSequence text = "Please Login!!!";
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, text, duration);
                toast.show();

            }
        });

        BtnBiller.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BtnBiller.setBackgroundResource(R.drawable.btn_find_selected);
                BtnPromo.setBackgroundResource(R.drawable.btn_promotion);
                Intent i = new Intent(getApplicationContext(),
                        BillerCodeActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                finish();
            }
        });

        BtnPromo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                BtnPromo.setBackgroundResource(R.drawable.btn_promotion_selected);
                Intent i = new Intent(getApplicationContext(),
                        MainActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(i);
                finish();
            }
        });
    }



    private void initViews(){
            BtnHistory =(Button) findViewById(R.id.btn_history);
            BtnBiller =(Button) findViewById(R.id.btn_biller);
            BtnPromo =(Button) findViewById(R.id.btn_promo);
            recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
            recyclerView.setHasFixedSize(true);
            RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
            recyclerView.setLayoutManager(layoutManager);

            getPromotions(0,3);
    }

    private void getPromotions(int a,int b){

            OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .cache(new Cache(getApplication().getCacheDir(), CACHE_SIZE))
                .addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
                .build();

            final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);

           /** Runnable progressRunnable = new Runnable() {

            @Override
            public void run() {
                loading.cancel();
            }
            };

            Handler pdCanceller = new Handler();
            pdCanceller.postDelayed(progressRunnable, 10000);*/

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://jpmockapi.azurewebsites.net/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(client)
                    .build();
            //Log.d(String.valueOf(client),String.valueOf(client));
            RequestInterface request = retrofit.create(RequestInterface.class);
            Call<JsonResponse> call = request.getPromotions(a,b);
            call.enqueue(new Callback<JsonResponse>() {
                    @Override
                    public void onResponse(Call<JsonResponse> call, Response<JsonResponse> response) {
                        if(response.isSuccess()) {
                            loading.dismiss();
                            JsonResponse jsonResponse = response.body();
                            data = new ArrayList<>(Arrays.asList(jsonResponse.getPromotion()));
                            adapter = new DataAdapter(data);
                            recyclerView.setAdapter(adapter);
                            //DBCreate();
                            //SubmitDataToSQLiteDB();

                        }
                        else{
                            loading.dismiss();
                            Context context = getApplicationContext();
                            CharSequence text = "Having Problem On Fetching Data!!! Try Again...";
                            int duration = Toast.LENGTH_LONG;

                            Toast toast = Toast.makeText(context, text, duration);
                            toast.show();

                        }

                    }

                    @Override
                    public void onFailure(Call<JsonResponse> call, Throwable t) {
                        loading.dismiss();
                        Log.d("Error",t.getMessage());
                        /**Context context = getApplicationContext();
                        CharSequence text = "No Network Connection!!! Try Again...";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(context, text, duration);
                        toast.show();*/

                    }


            });

    }

    @Override
    public void onStop(){
        super.onStop();
    }

    @Override
    public void onBackPressed() {

        Intent i = new Intent(getApplicationContext(),
                Start.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        finish();

    }
public类MainActivity扩展了AppCompatActivity{
私人回收站;
私有数组列表数据;
专用数据适配器;
私人按钮BTN历史记录、BTN填充器、BtnPromo;
私有静态最终长缓存_SIZE=10*1024*1024;
浮点x1,x2;
浮动y1,y2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
BtnHistory.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Context=getApplicationContext();
CharSequence text=“请登录!!!”;
int duration=Toast.LENGTH\u LONG;
Toast Toast=Toast.makeText(上下文、文本、持续时间);
toast.show();
}
});
BtnBiller.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
BtnBiller.setBackgroundResource(R.drawable.btn\u find\u selected);
BtnPromo.挫折资源(R.可提取的btn_促销);
意图i=新意图(getApplicationContext(),
BillerCodeActivity.class);
i、 添加标志(意图、标志、活动、清除、顶部);
星触觉(i);
完成();
}
});
BtnPromo.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
BtnPromo.setBackgroundResource(R.drawable.btn\u promotion\u selected);
意图i=新意图(getApplicationContext(),
主要活动(课堂);
i、 添加标志(意图、标志、活动、清除、顶部);
星触觉(i);
完成();
}
});
}
私有void initViews(){
BtnHistory=(按钮)findViewById(R.id.btn_历史);
BtnBiller=(按钮)findViewById(R.id.btn\u biller);
BtnPromo=(按钮)findviewbyd(R.id.btn\u promo);
recyclerView=(recyclerView)findViewById(R.id.card\u recycler\u视图);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
获得晋升(0,3);
}
私人促销(内部a、内部b){
OkHttpClient客户端=新建OkHttpClient.Builder()
.connectTimeout(30,时间单位为秒)
.readTimeout(30,时间单位为秒)
.writeTimeout(30,时间单位。秒)
.cache(新缓存(getApplication().getCacheDir(),缓存大小))
.addNetworkInterceptor(重写\u缓存\u控制\u侦听器)
.build();
final ProgressDialog loading=ProgressDialog.show(这是“正在获取数据”,“请稍候…”,false,false);
/**Runnable progressRunnable=new Runnable(){
@凌驾
公开募捐{
加载。取消();
}
};
Handler pdCanceller=新处理程序();
pCanceller.postDelayed(progressRunnable,10000)*/
改装改装=新改装.Builder()
.baseUrl(“http://jpmockapi.azurewebsites.net/")
.addConverterFactory(GsonConverterFactory.create())
.客户(客户)
.build();
//Log.d(String.valueOf(client),String.val
public interface RequestInterface {

@GET("/cmsapi/promos/{startrowindex}/{maxcount}")

Call<JsonResponse>getPromotions(@Path("startrowindex") int a,
                                @Path("maxcount") int b);