J'apprends comment coder et développer des applications pour Android, et j'essaie actuellement de créer une appli News. Mais je reçois cette erro quand j'essaie d'exécuter l'application: java.lang.NullPointerException: Tentative d'invoquer la méthode virtuelle 'java.lang.Object android.content.Context.getSystemService (java.lang.String)' sur un référence d'objet nul.Je reçois une erreur (java.lang.NullPointerException) lorsque j'essaie d'exécuter mon application
Les applications fonctionnaient bien au début, quand était juste une activité. Mais j'ai ensuite essayé de l'utiliser en utilisant viewpagers, j'ai corrigé un tas d'erreurs, mais celui-ci je ne peux pas savoir ce qui se passe. J'ai lu des choses sur la façon de corriger un NullPointerException
mais je ne peux toujours pas le réparer.
Voici le code:
S'IL VOUS PLAÎT, LES COMMENTAIRES ET IGNORE DOCUMENTATIONS EN PORTUGAIS, je viens juste writed IT TOUTE FAÇON QUI, UNORGANIZED. (J'AI PRÉVOYÉ DE S'INFORMER APRÈS AVOIR TERMINÉ LE CODE).
package com.example.android.news;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class NewsFragment extends Fragment implements android.support.v4.app.LoaderManager.LoaderCallbacks<List<News>> {
public NewsFragment(){
// Required empty public constructor
}
//Contexto do app
private Context mContext = getContext();
public static final String LOG_TAG = NewsFragment.class.getName();
/** Adapter da lista de news */
private NewsAdapters mAdapter;
/** URL para o dado da notícia (news) do dataset do The Gardian */
private static final String THE_GARDIAN_DATASET =
"https://content.guardianapis.com/search?api-key=4a8dba55-ace9-40bf-8a3c-05a1d2eebd65";
/**
* Valor constante para o ID do loader de news. Podemos escolher qualquer inteiro.
* Isto só importa realmente se você estiver usando múltiplos loaders.
*/
private static final int NEWS_LOADER_ID = 1;
/** TextView que é mostrada quando a lista é vazia */
private TextView mEmptyStateTextView;
/** ProgressBar que é mostrada enquanto o app busca dados do servidor */
private ProgressBar mLoadingSpinner;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_news , container, false);
final ArrayList<News> newses = new ArrayList<News>();
// Acha uma referência para a {@link ListView} no layout
ListView newsListView = (ListView) rootView.findViewById(R.id.list);
if (getTag() != null){
// Cria um novo adapter que pega uma lista vazia de news como entrada
mAdapter = new NewsAdapters(mContext, newses);
// Seta o adapter na {@link ListView}
// para que a lista pode ser populada na interface do usuário
newsListView.setAdapter(mAdapter);
}
//Acha uma referencia para a {@link TextView}
mEmptyStateTextView = (TextView) rootView.findViewById(R.id.empty_state_text_view);
//Acha uma referencia para a {@link ProgressBar}
mLoadingSpinner = (ProgressBar) rootView.findViewById(R.id.loading_spinner);
//Seta um emptyState {@ link emptyView} na ListView {@ link earthquakeListView}
newsListView.setEmptyView(mEmptyStateTextView);
newsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Acha a news atual que foi clicado
News currentNews = mAdapter.getItem(position);
//Converte a URL da String em um objeto URI (para passar no construtor da Intent)
Uri newsUri = Uri.parse(currentNews.getmWebUrl());
// Cria um novo intent para visualizar o URI
Intent webIntent = new Intent(Intent.ACTION_VIEW, newsUri);
// Envia a intent para lançar uma nova activity
startActivity(webIntent);
}
});
//Cria um objeto da classe para monitorar a conexão com a internet
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
//Verifica o estado da conexão
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
if (isConnected){
// Obtém uma referência ao LoaderManager, a fim de interagir com loaders.
LoaderManager loaderManager = getLoaderManager();
// Inicializa o loader. Passa um ID constante int definido acima e passa nulo para
// o bundle. Passa esta activity para o parâmetro LoaderCallbacks (que é válido
// porque esta activity implementa a interface LoaderCallbacks.
loaderManager.initLoader(NEWS_LOADER_ID, null, this);
} else {
mLoadingSpinner.setVisibility(View.GONE);
mEmptyStateTextView.setText(R.string.no_internet);
}
return rootView;
}
@Override
public Loader<List<News>> onCreateLoader(int id, Bundle args) {
Uri baseUri = Uri.parse(THE_GARDIAN_DATASET);
Uri.Builder uriBuilder = baseUri.buildUpon();
// Criar um novo loader para a dada URL
return new NewsLoader(getContext(), uriBuilder.toString());
}
@Override
public void onLoadFinished(Loader<List<News>> loader, List<News> news) {
//Hide the LoadingSpinner when the loading is finished
mLoadingSpinner.setVisibility(View.GONE);
//Seta o texto a ser mostrado caso não haja news a serem mostrados
mEmptyStateTextView.setText(R.string.empty_state);
// Limpa o adapter de dados de news anteriores
mAdapter.clear();
// Se há uma lista válida de {@link News}s, então os adiciona ao data set do adapter.
// Isto ativará a atualização da ListView.
if (news != null && !news.isEmpty()) {
mAdapter.addAll(news);
}
}
@Override
public void onLoaderReset(Loader<List<News>> loader) {
// Reseta o Loader, então podemos limpar nossos dados existentes.
mAdapter.clear();
}
}
Et le logcat:
09-29 16:17:44.553 26644-26644/com.example.android.news E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.news, PID: 26644
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
at android.view.LayoutInflater.from(LayoutInflater.java:233)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:181)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:166)
at com.example.android.news.NewsAdapters.<init>(NewsAdapters.java:0)
at com.example.android.news.NewsFragment.onCreateView(NewsFragment.java:69)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
at android.view.View.measure(View.java:21051)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
at android.view.View.measure(View.java:21051)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
at android.view.View.measure(View.java:21051)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
at android.view.View.measure(View.java:21051)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:21051)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
at android.view.View.measure(View.java:21051)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6459)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:849)
at android.view.View.measure(View.java:21051)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2583)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1642)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1893)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1522)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7098)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
at android.view.Choreographer.doCallbacks(Choreographer.java:702)
at android.view.Choreographer.doFrame(Choreographer.java:638)
09-29 16:17:44.553 26644-26644/com.example.android.news E/AndroidRuntime: at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Je ne peux pas le comprendre ce qui est faux. Je voudrais aprécier si quelqu'un pouvait m'aider!
Re votre « s'il vous plaît ignorer », il est préférable d'écrire correctement en premier lieu, plutôt que de mettre les bugs seulement devoir les enlever à nouveau. Ne pratiquez pas votre profession comme ça. – EJP
Concernant le point par EJP. S'il vous plaît voir comment faire un [mcve] –