2012-05-29 1 views
0

У меня возникают проблемы с раздуванием данных объекта JSON в моем элементе ListView.Android SimpleAdaptor NPE

Данные извлекаются из базы данных и преобразуются в массив JSON через PHP, а затем в объекты JSON. Все работает на этот момент (см. Мой встроенный Log.i() в моем коде).

Я получаю NPE следующим образом:

ThreadId = 1: поток, выходящий с неперехваченным исключением (группа = 0x40a781f8) неустранимых: главный java.lang.NullPointerException на android.widget.SimpleAdapter. (SimpleAdapter.java:85) в com.andaero.app.NavigationListFragment $ 1.callback (NavigationListFragment.java:97) в com.andaero.app.NavigationListFragment $ 1.callback (NavigationListFragment.java:1) в ком .androidquery.callback.AbstractAjaxCallback.callback (AbstractAjaxCallback.java:440) на com.androidquery.callback.AbstractAjaxCallback.afterWork (AbstractAjaxCallback.java:1010) на com.androidquery.callback.AbstractAjaxCallback.run (AbstractAjaxCallback.java:804) в android.os.Handler.handleCallback (Handler. java: 605) на android.os.Handler.dispatchMessage (Handler.java:92) на android.os.Looper.loop (Looper.java:137) на android.app.ActivityThread.main (ActivityThread.java: 4424) на java.lang.reflect.Method.invokeNative (собственный метод) на java.lang.reflect.Method.invoke (Method.java:511) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:787) at com.android.internal.os.ZygoteInit.ma в (ZygoteInit.java:554) в dalvik.system.NativeStart.main (Native Method)

Я не уверен, что я неправильно. Пожалуйста, покажите исправленные методы в своем ответе, чтобы я мог лучше понять и учиться на этом. Thanxs

public class NavigationListFragment extends ListFragment { 
    Context context; 
    private Activity c; 
    final AQuery aq = new AQuery(c); 
    private static String url = "http://192.168.1.17/Andaero/php/regulatory_list.php"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View view = inflater.inflate(R.layout.listview, container, false); 
     Log.i("NavigationListFragment", "ListView Inflated!!"); 
     return view; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     // AsyncTasks.getJSONArrays(context);// asynchronous task for getting 
     // JSONarray 
     aq.ajax(url, JSONArray.class, new AjaxCallback<JSONArray>() { 
      // JSON Node names 
      private static final String TAG_ID = "_id"; 
      private static final String TAG_LABEL = "label"; 
      private static final String TAG_TITLE = "title"; 
      private static final String TAG_DISCR = "description"; 
      private static final String TAG_GO2URL = "gotoURL"; 

      public void callback(String url, JSONArray json, AjaxStatus status) { 
       if (json != null) { 
        // NavigationListFragment.jsonListCallback(json); 
        Log.i("NavigationListFragment", "Caught JSON: " + json.toString()); 
        // Hashmap for ListView 
        List<HashMap<String, String>> mList = new ArrayList<HashMap<String, String>>(); 
        try { 
         // Parse the string to a JSON object 
         for (int i = 0; i < json.length(); i++) { 
          JSONObject json_data = json.getJSONObject(i); 

          // Storing each json item in variable 
          String id = json_data.getString(TAG_ID); 
          String label = json_data.getString(TAG_LABEL); 
          String title = json_data.getString(TAG_TITLE); 
          String description = json_data.getString(TAG_DISCR); 
          String gotoURL = json_data.getString(TAG_GO2URL); 

          // creating new HashMap 
          HashMap<String, String> map = new HashMap<String, String>(); 

          // adding each child node to HashMap key => value 
          map.put(TAG_ID, id); 
          map.put(TAG_LABEL, label); 
          map.put(TAG_TITLE, title); 
          map.put(TAG_DISCR, description); 
          map.put(TAG_GO2URL, gotoURL); 

          // adding HashList to ArrayList 
          mList.add(map); 
          Log.i("NavigationListFragment", "Hash: " + map); 
         } 
        } catch (JSONException e) { 
         Log.e("log_tag", "Error parsing data " + e.toString()); 
        } 

        // create the grid item mapping 
        String[] from = new String[] {TAG_LABEL, TAG_TITLE, TAG_DISCR, TAG_GO2URL}; 
        int[] to = new int[] { R.id.listLabel, R.id.listTitle, R.id.listDiscription, R.id.dummy }; 

        // Updating parsed JSON data into ListView 
        SimpleAdapter adapter = new SimpleAdapter(c, mList, R.layout.list_item, from, to);??<--THIS IS LINE 97 

        getListView().setAdapter(adapter); 

        // selecting single ListView item 
        ListView lv = getListView(); 

        // Launching new screen on Selecting Single ListItem 
        lv.setOnItemClickListener(new OnItemClickListener() { 

         public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
          //TODO 
         } 
        }); 

       } 
       // Log any network/JSON Errors 
       switch (status.getCode()) { 
        case AjaxStatus.TRANSFORM_ERROR : 
         Log.i("GetJSONArray", "TRANSFORM_ERROR"); 
         break; 
        case AjaxStatus.NETWORK_ERROR : 
         Log.i("GetJSONArray", "NETWORK_ERROR"); 
         // TODO Create Alert Dialog 
        case AjaxStatus.AUTH_ERROR : 
         Log.i("GetJSONArray", "AUTH_ERROR"); 
         break; 
       } 
      } 
     }); 

    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     // TODO 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     // TODO 
    } 
} 

ответ

0

Ответ на ваш вопрос может быть здесь ->https://stackoverflow.com/a/7493347/1149631 Как представляется, проблема с реализацией вашего SimpleAdapter.

+0

Я дал что попробовать, но я получаю тот же NPE. Thnx См. Редактирование/изменение в моем Q. – CelticParser

1

I Found the answer here

SimpleAdapter adapter = new SimpleAdapter(c, mList, R.layout.list_item, from, to); 

должно быть:

SimpleAdapter adapter = new SimpleAdapter(getActivity(), mList, R.layout.list_item, from, to);