首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我在onPostExecute()方法中获得空指针异常

我在onPostExecute()方法中获得空指针异常
EN

Stack Overflow用户
提问于 2018-07-05 08:15:20
回答 2查看 0关注 0票数 0
代码语言:txt
复制
public class MainActivity extends AppCompatActivity {

    private recycleradapter adapter;


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

        new utility().execute("https://api.themoviedb.org/3/movie/popular?");

        RecyclerView rv = (RecyclerView)findViewById(R.id.recycle);
        rv.setLayoutManager(new GridLayoutManager(MainActivity.this,2));
       adapter = new recycleradapter(MainActivity.this,new ArrayList<movie>());
       rv.setAdapter(adapter);
    }
    }

效用类

代码语言:txt
复制
public class utility extends AsyncTask<String,Void,ArrayList> {

    private recycleradapter adapter;
    private ArrayList<movie> movielist= new ArrayList<movie>();
    final static String API_PARAM="api_key";
    private static final String LOG_TAG = utility.class.getSimpleName();
    String getJsonresponse = "";


    @Override
    protected ArrayList<movie> doInBackground(String... strings) {

        URL url = buildUrl(strings[0]);
        try {
            getJsonresponse = makehttprequest(url);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return movielist;
    }

    @Override
    protected void onPostExecute(ArrayList<movie> movies) {

        adapter.updatemovies(movies);
        adapter.notifyDataSetChanged();

    }



    public  URL buildUrl(String movieurl)
        {
            String MOVIE_BASE_URL = movieurl;

            Uri builturi = Uri.parse(MOVIE_BASE_URL).buildUpon()
                    .appendQueryParameter(API_PARAM,BuildConfig.MyMovieApiKey)
                    .build();

            URL url = null;

            try {
                url = new URL(builturi.toString());
                Log.d(LOG_TAG,builturi.toString());
            }
            catch (MalformedURLException e)
            {
                e.printStackTrace();
            }
            return url;
        }

        public  String makehttprequest(URL url)throws IOException
        {
            String jsonresponse = null;
            if(url==null)
                return jsonresponse;
            HttpURLConnection urlConnection = null;
            InputStream reader  = null;
            try
            {
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setReadTimeout(10000);
                urlConnection.setConnectTimeout(15000);
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();

                if (urlConnection.getResponseCode() == 200)
                {
                    Log.v(LOG_TAG,""+urlConnection.getResponseCode());
                    reader = urlConnection.getInputStream();
                    jsonresponse = readFromStream(reader);
                }
                else
                {
                    Log.e(LOG_TAG, "error while connecting" + urlConnection.getResponseCode());
                }
            }
            catch (IOException e) {
                Log.e(LOG_TAG, "error while parsing json Response", e);
            }
            finally {
                if (urlConnection != null)
                    urlConnection.disconnect();
                if (reader != null)
                    reader.close();
            }
            return jsonresponse;
        }

        public  String readFromStream(InputStream reader)throws IOException
        {
            StringBuilder output = new StringBuilder();
            if (reader != null) {
                InputStreamReader isr = new InputStreamReader(reader, Charset.forName("UTF-8"));
                BufferedReader br = new BufferedReader(isr);
                String line = br.readLine();
                while (line != null) {
                    output.append(line);
                    line = br.readLine();
                }
                //   Log.v("imout",LOG_TAG);
            }
            return output.toString();
        }

        public  ArrayList<movie> parsejson(String jsoninput)throws JSONException
        {
            String posterpath = "";
            String id = "";
            try
            {
                JSONObject jobj = new JSONObject(jsoninput);
                JSONArray result = jobj.getJSONArray("results");

                for(int i=0;i<result.length();i++)
                {
                    movie contract  = new movie();
                    JSONObject firstresult = result.getJSONObject(i);
                    posterpath = firstresult.getString("poster_path");
                    id = firstresult.getString("id");
                    contract.setId(id);
                    contract.setPoster(posterpath);
                    movielist.add(contract);
                }

            }
            catch (JSONException e)
            {
                Log.e(LOG_TAG,"inside parsejson",e);
            }
            return movielist;
        }

    }

适配器类

代码语言:txt
复制
public class recycleradapter extends RecyclerView.Adapter<recycleradapter.ViewHolder> {

    private LayoutInflater mInflater;
    //  private TextView myTextView;
    private ArrayList<movie> mtext;
    private int mnoofitems;
    private String animal;
    movie x;

    public recycleradapter(Context context, ArrayList<movie> text) {

        this.mtext = text;
        this.mInflater = LayoutInflater.from(context);
    }

    public void updatemovies(ArrayList<movie> movies)
    {
        this.mtext = movies;
    }
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.recyclervw, parent, false);
        return new ViewHolder(view);
    }

    public void onBindViewHolder(ViewHolder holder, int position) {
        x = mtext.get(position);
        holder.bind(position);
    }

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


    public class ViewHolder extends RecyclerView.ViewHolder  {
        TextView myImageView;
        // TextView myText;

        ViewHolder(View itemView) {
            super(itemView);
            myImageView = (TextView) itemView.findViewById(R.id.image);

        }

        /*     @Override
             public void onClick(View view) {
                 if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
             }
     */
        public void bind(int position) {
            //  myImageView.setImageBitmap();
             myImageView.setText(x.getPoster());
        }
    }

我只是试图显示电影海报ID,但是在onPostExecute()方法中获得空指针异常。我无法调试它。这是我所得到的错误的片段

代码语言:txt
复制
6-16 21:51:36.441 18466-18466/com.example.tarun.moviereview E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.tarun.moviereview, PID: 18466
    java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.tarun.moviereview.recycleradapter.updatemovies(java.util.ArrayList)' on a null object reference
        at com.example.tarun.moviereview.utility.onPostExecute(utility.java:57)
        at com.example.tarun.moviereview.utility.onPostExecute(utility.java:23)
        at android.os.AsyncTask.finish(AsyncTask.java:660)
        at android.os.AsyncTask.-wrap1(AsyncTask.java)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:677)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6342)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
EN

回答 2

Stack Overflow用户

发布于 2018-07-05 16:34:18

公共类实用程序扩展AsyncTask{

你就是这样定义AsyncTask的吗?应该是

代码语言:txt
复制
public class Utility extends AsyncTask<String, Void, ArrayList<movie>{
票数 0
EN

Stack Overflow用户

发布于 2018-07-05 17:59:04

你正在尝试在空指针上使用方法adapter

代码语言:javascript
复制
@Override
protected void onPostExecute(ArrayList<movie> movies) {
    adapter.updatemovies(movies); // adapter has not been initialized
    adapter.notifyDataSetChanged();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档