2014-12-23 3 views
1

Я работаю в Android App ListView, работая под фрагментом слоя по фрагменту, но я не могу заставить его работать. Я получил сообщение об ошибке, которая говорит:NullPointerException on .setAdapter в фрагменте с ListView не работает

метод setListAdapter (ListAdapter) не определено для нового Runnable() {}

Я не знаю, что мне нужно изменить, чтобы получить эту работу.

public class FragmentA extends Fragment { 

    private String url = "http://192.168.2.150/54_tower/Json_Tower.php"; 

    private static final String J_NAME = "t_name"; 
    private static final String J_NUM = "t_num"; 
    private static final String J_FLOOR = "t_floor"; 
    private static final String J_CLASS = "t_room_class"; 
    private static final String J_TEACHER = "t_room_teacher"; 
    private static final String J_TOILET = "t_toilet"; 
    private static final String J_MAP = "t_map"; 

    private static final String D_NAME = "NAME"; 
    private static final String D_NUM = "NUM"; 
    private static final String D_FLOOR = "FLOOR"; 
    private static final String D_CLASS = "CLASS"; 
    private static final String D_TEACHER = "TEACHER"; 
    private static final String D_TOILET = "TOILET"; 
    private static final String D_MAP = "MAP"; 

    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_PRODUCTS = "products"; 

    Activity act; 
    ListView ListView1; 

    JSONArray products = null; 

    private ProgressDialog pDialog; 

    JSONParser jParser = new JSONParser(); 

    ArrayList<HashMap<String, String>> MyArrList; 

    public static FragmentA newInstance(int page, String title) { 
     FragmentA fragmentFirst = new FragmentA(); 
     Bundle args = new Bundle(); 
     args.putInt("someInt", page); 
     args.putString("someTitle", title); 
     fragmentFirst.setArguments(args); 
     return fragmentFirst; 
    } 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.main_tower, container, false); 

     // Permission StrictMode 
     if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
        .permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 

     MyArrList = new ArrayList<HashMap<String, String>>(); 

     new LoadAllData().execute(); 

     final ListView lisView1 = (ListView) rootView 
       .findViewById(R.id.listView1); 

     lisView1.setOnItemClickListener(new OnItemClickListener() { 

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

       Intent i = new Intent(getActivity(), Map.class); 
       startActivity(i); 

      } 
     }); 

     return rootView; 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // if result code 100 
     if (resultCode == 100) { 
      // if result code 100 is received 
      // means user edited/deleted product 
      // reload this screen again 
      // Intent intent = act.getIntent(); 
      // act.finish(); 
      // startActivity(intent); 
     } 

    } 

    class LoadAllData extends AsyncTask<String, String, String> { 

     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(getActivity()); 
      pDialog.setMessage("Loading Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     protected String doInBackground(String... args) { 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      JSONObject json = jParser.makeHttpRequest(url, "GET", params); 

      Log.d("All JSon: ", json.toString()); 

      try { 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        products = json.getJSONArray(TAG_PRODUCTS); 

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

        // Log.d("TAG JSON",""+data.toString()); 

        for (int i = 0; i < products.length(); i++) { 
         JSONObject c = products.getJSONObject(i); 

         // adding each child node to HashMap key => value 
         map = new HashMap<String, String>(); 
         map.put(D_NAME, c.getString(J_NAME)); 
         map.put(D_NUM, c.getString(J_NUM)); 
         map.put(D_FLOOR, c.getString(J_FLOOR)); 
         map.put(D_CLASS, c.getString(J_CLASS)); 
         map.put(D_TEACHER, c.getString(J_TEACHER)); 
         map.put(D_TOILET, c.getString(J_TOILET)); 
         map.put(D_MAP, c.getString(J_MAP)); 

         MyArrList.add(map); 
        } 
       } else { 
        // no products found 
        // Launch Add New product Activity 
        // Intent i = new Intent(getApplicationContext(), 
        // NewProductActivity.class); 
        // Closing all previous activities 
        // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        // startActivity(i); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     protected void onPostExecute(String file_url) { 
      pDialog.dismiss(); 

      final ArrayList<HashMap<String, String>> MyArrList = new ArrayList<HashMap<String, String>>(); 
      final ListView myList = (ListView) getView().findViewById(
        R.id.listView1); 

      act.runOnUiThread(new Runnable() { 
       public void run() { 
        ListAdapter sAdap = new SimpleAdapter(getActivity(), 
          MyArrList, R.layout.tower_column, new String[] { 
            D_NAME, D_NUM, D_FLOOR, D_CLASS, D_TEACHER, 
            D_TOILET, D_MAP }, new int[] { R.id.Name, 
            R.id.Num, R.id.Floor, R.id.Room_Class, 
            R.id.Room_Teacher, R.id.Toilet }); 
        myList.setAdapter(sAdap); 
       } 
      }); 

     } 

    } 
} 

Вот LogCat: Image LogCat

+0

Пожалуйста, включите в свой вопрос, а не ссылку для фото. Мы хотим, чтобы вопросы по-прежнему были полезны для будущих посетителей, а ссылки нарушаются. Это также очень трудно прочитать, текст не может быть скопирован и вставлен, и некоторые люди могут иметь ограничения на брандмауэре на работе, которые мешают им видеть ваше изображение с момента его размещения на Facebook. – skrrgwasme

ответ

0

Вам не нужно размещать в UI нить onPostExecute с момента запуска задачи в потоке пользовательского интерфейса. Удалите runOnUIThread, и он должен работать.

0

Вместо runOnUIThread просто создайте обработчик и опубликуйте его для этого обработчика.

Также создайте listview как поле этого класса и получите ссылку на него в onCreateView или onActivityCreated. Я думаю, что это вызывает исключение nullPointerException. Важно то, что вы должны создавать Listview как поле класса фрагмента вместо того, чтобы иметь его внутри локальной области методов.

Смежные вопросы