在回收者视图中使用下载管理器

Using Download manager with recycler view

这是我的 DataAdapter class:

package com.example.ashish.fileserver;

import android.app.DownloadManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

import retrofit2.Callback;

/**
 * Created by ashish on 23/8/16.
 */
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> {
    private ArrayList<AndroidVersions> android;
    private static String url;
    private Context context;




    public DataAdapter(Context context,ArrayList<AndroidVersions> android) {
        this.android = android;
        this.context = context;

    }

    @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(DataAdapter.ViewHolder viewHolder, int i) {

        viewHolder.tv_name.setText(android.get(i).getName());
        viewHolder.tv_version.setText(android.get(i).getVer());

        //viewHolder.tv_api_level.setText(android.get(i).getApi());
    }


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

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private TextView tv_name,tv_version,tv_api_level;
        public CardView card;
        ArrayList<AndroidVersions> android = new ArrayList<AndroidVersions>();

        public ViewHolder(View view) {
            super(view);
            this.android = android;


            tv_name = (TextView)view.findViewById(R.id.tv_name);
            tv_version = (TextView)view.findViewById(R.id.tv_version);
            view.setOnClickListener(this);

            //tv_api_level = (TextView)view.findViewById(R.id.tv_api_level);

        }


        @Override

        public void onClick(View view) {
            System.out.println(getAdapterPosition());
            int position = getAdapterPosition();
            if (position == 1){
                System.out.println("hey Ashish");
                url = "http://vfu.bg/en/e-Learning/Computer-Basics--CTE_I__-_Computer_Basics.ppt";

                String servicestring = Context.DOWNLOAD_SERVICE;
                DownloadManager downloadmanager;
                downloadmanager  = (DownloadManager)getSystemService(servicestring);
                Uri uri = Uri
                        .parse(url);
                DownloadManager.Request request = new DownloadManager.Request(uri);
                long reference = downloadmanager.enqueue(request);
                Toast.makeText(context.getApplicationContext(),
                        "Your file is now downloading...", Toast.LENGTH_LONG).show();
            }
            
            }




    }


}

我想在单击 Cardview 时下载一些文件,但显示 java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 的一些错误。当我点击卡片视图时,它显示 App Stopped Working。我该如何解决这个问题?

如果您检查 DownloadManager,它会显示:

Note that the application must have the INTERNET permission to use this class.

你能接受吗?此外,这种操作应该在不同的 AsyncTask 中完成,这样您就可以保持主线程空闲。

最后,使用System.out.println不会得到任何日志。使用 Android Log API 代替

    String servicestring = Context.DOWNLOAD_SERVICE; 
    downloadmanager  = (DownloadManager)getSystemService(servicestring);

错误在这两行中,我已将其更改为:

   String servicestring = Context.DOWNLOAD_SERVICE;
   downloadmanager  = (DownloadManager)context.getSystemService(servicestring);

并且在主要 activity 这一行显示错误:

    adapter = new DataAdapter(data);

至:

    adapter = new DataAdapter(data, ScrollingActivity_Test.this);