1

Я получаю эту ошибку, когда нажимаю на значок фрагмента в своем навигационном ящике. Мой вывод logcat приведен ниже.View.findViewById в классе фрагментов

E/AndroidRuntime: FATAL EXCEPTION: main 

Process: com.example.abdul_majeed.alruthea, PID: 16293 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
      at com.example.abdul_majeed.alruthea.Telephones.onCreateView(Telephones.java:73) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) 
      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

Это фрагмент:

public class Telephones extends Fragment { 


RequestQueue requestQueue; 
private List<tel_list> data = new ArrayList<tel_list>(); 
private ListView listView; 
private TelAdapter adapter; 
private EditText telfilter; 
private ProgressDialog progressDialog; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 



    listView = (ListView) getView().findViewById(R.id.listview1); 
    adapter = new TelAdapter(getActivity(), data); 
    listView.setAdapter(adapter); 
    progressDialog = new ProgressDialog(getActivity()); 
    progressDialog.setMessage("please wait"); 
    progressDialog.show(); 
    telfilter = (EditText) getView().findViewById(R.id.myFilter); 
    telfilter.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


      List<tel_list> temp = new ArrayList<tel_list>(); 

      String input = s.toString(); 

      for (int i = 0; i < data.size(); i++) { 
       tel_list item = data.get(i); 

       String name = item.getName(); 
       String number = item.getNumber(); 

       if (name.contains(input) || number.contains(input)) { 
        temp.add(item); 
       } 
      } 

      adapter.setTelephones(temp); 
      adapter.notifyDataSetChanged(); 

     } 


     @Override 
     public void afterTextChanged(Editable s) { 


     } 

    }); 

    requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); 

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://abood250.com/alruthea/getphones.php", 
      new com.android.volley.Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        hideprogressDialog(); 

        try { 

         JSONArray jsonArray = response.getJSONArray("telephones"); 
         for (int i = 0; i < jsonArray.length(); i++) { 
          JSONObject telephones = jsonArray.getJSONObject(i); 
          tel_list tellist = new tel_list(); 

          tellist.setName(telephones.getString("name")); 
          tellist.setNumber(telephones.getString("number")); 

          data.add(tellist); 

         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        adapter.notifyDataSetChanged(); 
       } 
      }, 

      new com.android.volley.Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        hideprogressDialog(); 

        Log.e("Volley", "Error"); 
       } 
      } 


    ); 

    requestQueue.add(jsonObjectRequest); 
    return inflater.inflate(R.layout.activity_telephones,container,false); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    hideprogressDialog(); 

} 

private void hideprogressDialog() { 

    if (progressDialog != null) { 
     progressDialog.dismiss(); 
     progressDialog = null; 
    } 

} 
} 

ответ

0

Это происходит потому, что вы возвращаете завышенный вид напрямую.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_telephones,container,false); 

    listView = (ListView) view.findViewById(R.id.listview1); 
    adapter = new TelAdapter(getActivity(), data); 
    listView.setAdapter(adapter); 
    progressDialog = new ProgressDialog(getActivity()); 
    progressDialog.setMessage("please wait"); 
    progressDialog.show(); 
    telfilter = (EditText) view.findViewById(R.id.myFilter); 
    telfilter.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


      List<tel_list> temp = new ArrayList<tel_list>(); 

      String input = s.toString(); 

      for (int i = 0; i < data.size(); i++) { 
       tel_list item = data.get(i); 

       String name = item.getName(); 
       String number = item.getNumber(); 

       if (name.contains(input) || number.contains(input)) { 
        temp.add(item); 
       } 
      } 

      adapter.setTelephones(temp); 
      adapter.notifyDataSetChanged(); 

     } 


     @Override 
     public void afterTextChanged(Editable s) { 


     } 

    }); 

    requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); 

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://abood250.com/alruthea/getphones.php", 
      new com.android.volley.Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        hideprogressDialog(); 

        try { 

         JSONArray jsonArray = response.getJSONArray("telephones"); 
         for (int i = 0; i < jsonArray.length(); i++) { 
          JSONObject telephones = jsonArray.getJSONObject(i); 
          tel_list tellist = new tel_list(); 

          tellist.setName(telephones.getString("name")); 
          tellist.setNumber(telephones.getString("number")); 

          data.add(tellist); 

         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        adapter.notifyDataSetChanged(); 
       } 
      }, 

      new com.android.volley.Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        hideprogressDialog(); 

        Log.e("Volley", "Error"); 
       } 
      } 


    ); 

    requestQueue.add(jsonObjectRequest); 

    return view; 
} 
0

Изменить код, как это. Замените getView() с представлением.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.activity_telephones,container,false); 

    listView = (ListView) getView().findViewById(R.id.listview1); 
    adapter = new TelAdapter(getActivity(), data); 
    listView.setAdapter(adapter); 
    progressDialog = new ProgressDialog(getActivity()); 
    progressDialog.setMessage("please wait"); 
    progressDialog.show(); 
    telfilter = (EditText) getView().findViewById(R.id.myFilter); 
    telfilter.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


      List<tel_list> temp = new ArrayList<tel_list>(); 

      String input = s.toString(); 

      for (int i = 0; i < data.size(); i++) { 
       tel_list item = data.get(i); 

       String name = item.getName(); 
       String number = item.getNumber(); 

       if (name.contains(input) || number.contains(input)) { 
        temp.add(item); 
       } 
      } 

      adapter.setTelephones(temp); 
      adapter.notifyDataSetChanged(); 

     } 


     @Override 
     public void afterTextChanged(Editable s) { 


     } 

    }); 

    requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); 

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://abood250.com/alruthea/getphones.php", 
      new com.android.volley.Response.Listener<JSONObject>() { 

       @Override 
       public void onResponse(JSONObject response) { 
        hideprogressDialog(); 

        try { 

         JSONArray jsonArray = response.getJSONArray("telephones"); 
         for (int i = 0; i < jsonArray.length(); i++) { 
          JSONObject telephones = jsonArray.getJSONObject(i); 
          tel_list tellist = new tel_list(); 

          tellist.setName(telephones.getString("name")); 
          tellist.setNumber(telephones.getString("number")); 

          data.add(tellist); 

         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        adapter.notifyDataSetChanged(); 
       } 
      }, 

      new com.android.volley.Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        hideprogressDialog(); 

        Log.e("Volley", "Error"); 
       } 
      } 


    ); 

    requestQueue.add(jsonObjectRequest); 
    return view; 
    } 
Смежные вопросы