How to get values from Internet and to a String[] array and pass it to a grid view in Android?
android, arrays, java, json
Solution
It looks like `GRID_DATA` is never given a value, hence the `NullPointerException` when you try to access it's member (`gridValues.length`) at `QGFragment.java:74`.
You are setting an item in the array at `GRID_DATA[i] = name;` but never actually creating the array with something like `GRID_DATA = new String[];`
Array Initiliazation
An array is just a list of objects (in this case `String`s). Each object has an address that can be accessed with `[location]` in that list. But if you never create that list in the first place then accessing `[location]` of that list that doesn't exist isn't going to work.
Problem
I did the getting values from internet and putting data from the GRID_DATA array to a grid view both worked separately and both worked fine. I combined both together where the data from the JSONObject will add values to the JSON Array so from that the GRID_DATA will get the strings needed for the GRID View. But I get some errors in it. ``` import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Fragment; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; public class QGFragment extends Fragment { GridView grdView; // This Data show in grid ( Used by adapter ) String strurl; //URL to get JSON Array private static String url = "http://localhost/app/data.php"; //JSON Node Names private static final String TAG_QP = "qp"; private static final String TAG_NAME = "name"; //private static final String TAG_VAL = "val"; //private static final String TAG_NPICS = "nPics"; JSONArray qp = null; static String[] GRID_DATA; public QGFragment(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_qg, container, false); grdView = (GridView)rootView.findViewById(R.id.gridview); new JSONParse().execute(); // Instance of ImageAdapter Class grdView.setAdapter( new GridAdapter( getActivity(), GRID_DATA ) ); return rootView; } class GridAdapter extends BaseAdapter { private Context context; private final String[] gridValues; //Constructor to initialise values public GridAdapter(Context context, String[ ] gridValues) { this.context = context; this.gridValues = gridValues; } @Override public int getCount() { // Number of times getView method call depends upon gridValues.length return gridValues.length; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } // Number of times getView method call depends upon gridValues.length public View getView(int position, View convertView, ViewGroup parent) { // LayoutInflator to call external grid_item.xml file LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); // get layout from grid_item.xml ( Defined Below ) gridView = inflater.inflate( R.layout.grid_list , null); // set value into textview TextView textView = (TextView) gridView .findViewById(R.id.icon_text); textView.setText(gridValues[position]); // set image based on selected text ImageView imageView = (ImageView) gridView .findViewById(R.id.icon_image); imageView.setImageResource(R.drawable.ic_launcher); } else { gridView = (View) convertView; } return gridView; } } private class JSONParse extends AsyncTask<String, String, JSONObject> { private ProgressDialog pDialog; @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(getActivity()); pDialog.setMessage("Getting Data ..."); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override protected JSONObject doInBackground(String... args) { JSONParser jParser = new JSONParser(); // Getting JSON from URL JSONObject json = jParser.getJSONFromUrl(url); return json; } @Override protected void onPostExecute(JSONObject json) { pDialog.dismiss(); try { // Getting JSON Array qp = json.getJSONArray(TAG_QP); for(int i = 0 ; i < qp.length(); i++){ JSONObject c = qp.getJSONObject(i); // Storing JSON item in a Variable String name = c.getString(TAG_NAME); //String val = c.getString(TAG_VAL); //String npics = c.getString(TAG_NPICS); GRID_DATA[i] = name; //Set JSON Data in TextView }; } catch (JSONException e) { e.printStackTrace(); } } } } ``` The Log Cat is: ``` 12-24 20:53:06.702: W/dalvikvm(4304): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 12-24 20:53:06.743: E/AndroidRuntime(4304): FATAL EXCEPTION: main 12-24 20:53:06.743: E/AndroidRuntime(4304): java.lang.NullPointerException 12-24 20:53:06.743: E/AndroidRuntime(4304): at com.qrodsintegrated.QGFragment$GridAdapter.getCount(QGFragment.java:74) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.widget.GridView.setAdapter(GridView.java:180) 12-24 20:53:06.743: E/AndroidRuntime(4304): at com.qrodsintegrated.QGFragment.onCreateView(QGFragment.java:51) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:795) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:998) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.app.BackStackRecord.run(BackStackRecord.java:622) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1330) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:417) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.os.Handler.handleCallback(Handler.java:605) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.os.Handler.dispatchMessage(Handler.java:92) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.os.Looper.loop(Looper.java:137) 12-24 20:53:06.743: E/AndroidRuntime(4304): at android.app.ActivityThread.main(ActivityThread.java:4340) 12-24 20:53:06.743: E/AndroidRuntime(4304): at java.lang.reflect.Method.invokeNative(Native Method) 12-24 20:53:06.743: E/AndroidRuntime(4304): at java.lang.reflect.Method.invoke(Method.java:511) 12-24 20:53:06.743: E/AndroidRuntime(4304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 12-24 20:53:06.743: E/AndroidRuntime(4304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 12-24 20:53:06.743: E/AndroidRuntime(4304): at dalvik.system.NativeStart.main(Native Method) 12-24 20:53:08.722: I/Process(4304): Sending signal. PID: 4304 SIG: 9 ```