Phill Wiggins
Phill Wiggins

Reputation: 2927

ArrayList not initialised

I'm just doing some learning and can't see why this ArrayList is initialised but can't be used outside of method its populated within. Can anyone explain? Thanks in advance...

For example if I aske the ArrayList.size() within the method it shows that it has been initialised but elsewhere outside the method it won't.

package com.purewowstudio.animations;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.GsonBuilder;
import com.purewowstudio.animations.extras.CustomGrid;
import com.purewowstudio.animations.models.ActorArray;
import com.purewowstudio.animations.models.ActorObject;

import java.util.ArrayList;

public class ActorList extends ActionBarActivity {

String LOG_TAG = ActorList.class.getSimpleName();
private ArrayList<ActorObject> actorObjectArrayList;
ActorArray actorArray;
GridView actorGrid;

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

    if (actorObjectArrayList != null) {
        ActorObject[] actors = actorObjectArrayList.toArray(new ActorObject[actorObjectArrayList.size()]);

        String actorsNames[] = new String[actorObjectArrayList.size()];
        String actorsImages[] = new String[actorObjectArrayList.size()];

        for (int i = 0; i < actorObjectArrayList.size(); i++) {
            actorsNames[i] = actors[i].getName();
            actorsImages[i] = actors[i].getImage();
        }

        CustomGrid adapter = new CustomGrid(ActorList.this, actorsNames, actorsImages);
        actorGrid = (GridView) findViewById(R.id.grid);
        actorGrid.setAdapter(adapter);
        actorGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                //Toast.makeText(ActorList.this, "You Clicked at " + actorsNames[+position], Toast.LENGTH_SHORT).show();
            }
        });
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.animation_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private void getActors(){
    String url ="http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors";
    RequestQueue queue = Volley.newRequestQueue(this);

    StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    actorArray = new GsonBuilder().create().fromJson(response, ActorArray.class);
                    actorObjectArrayList = actorArray.getActors();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // TODO Auto-generated method stub
            Log.v(LOG_TAG, "Volley Error");
        }
    });
    queue.add(stringRequest);
}

}

Upvotes: 0

Views: 128

Answers (1)

Kevin Avignon
Kevin Avignon

Reputation: 2903

The reason why you can't access the content with which you initialized the arraylist in other methods is simple. It is local data inside the scope of the OnCreate. You should define a constructor of your class and initialize the arraylist there. Then in your methods, you can add the data that you need to add. When you'll be looking for data within the arraylist, it will have everything that you're looking for.

Upvotes: 4

Related Questions