0

Я получаю NPE, когда пытаюсь создать экземпляр класса, я уже пробовал использовать NameOftheClass.this, getApplicationContext(), getApplication(). Ни один из них не работает, вот лог:Java.lang.NullPointerException at getapplicationContext() Android

java.lang.NullPointerException 
at br.com.FragmentClientes.<init>(FragmentClientes.java:87) 

линия 87 является: mRepositorio = new Repositorio(FragmentClientes.this);

А вот фрагмент кода:

public class FragmentClientes extends ActionBarActivity { 


    private boolean searchCheck; 
    private List<ClienteModel> clientes = new ArrayList<ClienteModel>(); 
    private ProgressBar progressBar; 
    private ListView lv; 
    private ClientViewAdapter ad; 
    private ClientViewAdapter ads; 
    private SearchView searchView; 
    private LinearLayout footerLinearLayout; 
    private boolean shouldExecuteOnResume; 
    private Repositorio mRepositorio; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState); 
     // TODO Auto-generated method stub 
     setContentView(R.layout.fragment_cliente); 

     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     SecurePreferences mSessao = new SecurePreferences(FragmentClientes.this, "sessao"); 
     mSessao.put("menuAtual", "Clientes"); 

     lv = (ListView) findViewById(R.id.listaClientes); 

    } 


    public FragmentClientes(Integer idViagem) { 

     clientes = new ArrayList<ClienteModel>(); 


     try { 

      mRepositorio = new Repositorio(FragmentClientes.this); 

      List lista = mRepositorio.getClientesViagem(idViagem); 

      clientes = lista; 


      ad = new ClientViewAdapter(FragmentClientes.this, this, clientes); 



      lv.setVerticalFadingEdgeEnabled(true); 
      lv.setVerticalScrollBarEnabled(true); 


      lv.setAdapter(ad); 



     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 
} 
+0

use SecurePreferences mSessao = new SecurePreferences (FragmentClientes.this, "sessao"); –

+0

@AmrutBidri попробовал это, все еще получая ту же ошибку –

+0

@Stacktwo вы найдете полное решение в моем ответе ниже. – Kelevandos

ответ

2

Не используйте контекст деятельности внутри своего конструктора, он теперь будет работать. Пожалуйста, поставьте весь код из конструктора в метод и называют его внутри `OnCreate метода, как это:

@Override 
public void onCreate(Bundle savedInstanceState) { 


    super.onCreate(savedInstanceState); 
    // TODO Auto-generated method stub 
    setContentView(R.layout.fragment_cliente); 

    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    SecurePreferences mSessao = new SecurePreferences(FragmentClientes.this, "sessao"); 
    mSessao.put("menuAtual", "Clientes"); 

    Integer idViagem = getIntent().getIntExtra(TAG, -1); 

    init(idViagem); 



} 


public void init(Integer mId) { 

    clientes = new ArrayList<ClienteModel>(); 


    try { 

     mRepositorio = new Repositorio(FragmentClientes.this); 

     List lista = mRepositorio.getClientesViagem(mId); 

     clientes = lista; 


     ad = new ClientViewAdapter(FragmentClientes.this, this, clientes); 



     lv.setVerticalFadingEdgeEnabled(true); 
     lv.setVerticalScrollBarEnabled(true); 


     lv.setAdapter(ad); 



    } catch (Exception e) { 
     e.printStackTrace(); 
    } 


} 

Кроме того, вам нужно будет найти другой способ передачи параметра целого.

Для этого используйте Intent.putExtra(TAG, idViagem) на намерениях, который начинает деятельность, а затем получить значение в конструкторе с getIntent().getIntExtra(TAG, -1)

Например, если вы начинаете деятельность FragmentClientes от другой деятельности:

Intent intent = new Intent(this, FragmentClientes.class); 
intent.putExtra("idViagem", int_value_of_id_that_you_passed_through_constructor); 
startActivity(intent); 
2

Dont создать Parameteriged Activity Конструктор

просто начните свои данные в Activity Методы обратного вызова, такие как onCreate(), onResume()

Начните свой Activity Использование Intent

Для активности документа далее Activity Documnetation

1

FragmentClientes является активностью. Вы не должны определять пользовательский конструктор, так как метод onCreate ведет себя как конструктор и будет автоматически вызван системой.

поэтому поставьте код на onCreate способ.

Важно: вы никогда не должны, я имею в виду действительно не называютnew FragmentClientes(1);

+0

Мне нужно передать параметр Id в классе FragmentClientes, как я могу это сделать без создания конструктора? –

+0

Пожалуйста, см. Мой ответ для этого. – Kelevandos

+0

@Stacktwo я вижу вашу проблему. Вы должны передавать параметры между действиями с помощью дополнительных опций Intent: http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-in-android – dit

0

Возможно, это связано с тем, что ListView ListView не создается должным образом

private ListView lv; 

Вы никогда не соглашаетесь (в коде, который вы указали), любой экземпляр для объекта.

+0

Я обновил вопрос, все еще получая ту же ошибку –

+0

Но ваша линия (87) не должна бросать исключение NullPointerException. Вы уверены, что это Линия, а не следующая? –

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