IllegalStateException “Système de services ne sont pas disponibles pour les Activités avant onCreate()”
J'enquêter sur ce problème, mais ne peut pas trouver un solution pour mon code. J'ai quatre classes. Mais je suis sûr, pas de problème de classe nommée Connecter(Vous verrez objet de la classe JsonData ci-dessous.)Je partage donc les trois autres classes. Mon MainActivity est;
public class MainActivity extends Activity {
String keys[] = {"Message", "Subject", "MessageType", "SentTime", "ToName", "Id"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
JsonData.keys=keys;
JsonData jsonData = new JsonData();
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
dataList= jsonData.GetData();
}
}
- Je envoyer keyvalues json et puis prendre des données à partir de n'importe quelle url(c'est privé, je le supprimer) sur la classe JsonData;
public class JsonData extends Activity{
Connect connect = new Connect();
private String url = "url";
static String keys[];
public ArrayList<HashMap<String, String>> GetData() {
JSONArray json = null;
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
InternetCheck netCheck = new InternetCheck();
if(netCheck.isInternetOn()){
try {
JSONObject result = connect
.connect(url);
json = result.getJSONArray("d");
for (int i = 0; i < json.length(); i++) {
HashMap<String, String> hashmap = new HashMap<String, String>();
JSONObject json2 = json.getJSONObject(i);
for (int j = 0; j < keys.length; j++){
hashmap.put(keys[j], json2.getString(keys[j]));
}
mylist.add(hashmap);
}
} catch (Exception e) {
e.printStackTrace();
}
}
else
Toast.makeText(this, " Check Internet Options. ", Toast.LENGTH_LONG).show();
return mylist;
}
}
Dans cette classe, je teste la connexion internet de l'objet netCheck. Je pense que mon problème est sur cette classe. InternetCheck.java ;
public class InternetCheck extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public final boolean isInternetOn() {
//get Connectivity Manager object to check connection
ConnectivityManager connec = (ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE);
//Check for network connections
if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {
return true;
} else if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED ) {
return false;
}
return false;
}
}
Je suis se douter de la ligne commentée **//obtenir le Gestionnaire de Connectivité objet de vérification de la connexion ** .
Enfin mon Logcat;
08-27 10:13:45.449: E/AndroidRuntime(24925): FATAL EXCEPTION: main
08-27 10:13:45.449: E/AndroidRuntime(24925): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jsonparser/com.example.jsonparser.MainActivity}: java.lang.IllegalStateException: System services not available to Activities before onCreate()
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.os.Looper.loop(Looper.java:130)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.ActivityThread.main(ActivityThread.java:3768)
08-27 10:13:45.449: E/AndroidRuntime(24925): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 10:13:45.449: E/AndroidRuntime(24925): at java.lang.reflect.Method.invoke(Method.java:507)
08-27 10:13:45.449: E/AndroidRuntime(24925): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
08-27 10:13:45.449: E/AndroidRuntime(24925): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
08-27 10:13:45.449: E/AndroidRuntime(24925): at dalvik.system.NativeStart.main(Native Method)
08-27 10:13:45.449: E/AndroidRuntime(24925): Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate()
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.Activity.getSystemService(Activity.java:3536)
08-27 10:13:45.449: E/AndroidRuntime(24925): at com.example.jsonparser.InternetCheck.isInternetOn(InternetCheck.java:19)
08-27 10:13:45.449: E/AndroidRuntime(24925): at com.example.jsonparser.JsonData.GetData(JsonData.java:25)
08-27 10:13:45.449: E/AndroidRuntime(24925): at com.example.jsonparser.MainActivity.onCreate(MainActivity.java:21)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-27 10:13:45.449: E/AndroidRuntime(24925): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
Je le dis encore une fois, j'ai regardé sur d'autres questions, mais pas de solution pour moi. Merci à l'avance.
- ce que vous avez besoin est un utilitaire de la classe n'est pas une activité de classe
Vous devez vous connecter pour publier un commentaire.
InternetCheck
est une Activité de la classe. L'activité est lancée parstartActivity
.getSystemService
nécessite contexte d'activité.http://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)
Vous avez cette
Et vous faire
Ce que vous avez besoin est un utilitaire de la classe n'est pas une activité de classe. Aussi, si vous faites de réseau liés à l'opération de le faire dans un
thread
ouAsynctask
De vérifier dans toute activité
Vous pouvez être connecté à un wifi wifi mais peut-être pas se connecter au net. Ce vérifie seulement pour le réseau de la disponibilité de la connexion.
Edit:
JsonData jsonData = new JsonData()
. JsonData est une activité les activités de la classe sont démarrés parstartActivity
avec l'intention. aussi se connecter .connexion(url) " toutes liées au réseau de l'opération doit être effectuée sur unthread
. utilisationthread
ouasynctask
NetworkOnMainThreadException
. vérifiez la documentation developer.android.com/reference/android/os/.... et faire vérifier le fichier de réponse. je suis sûr que si vous faites les changements qu'il va travaillerJsonData
étendre asynctask. Aussi j'en ai fait un à l'intérieur de la classe. Déclaré dataList en tant que membre de la classe de sorte que vous pouvez ajouter les données à la liste degetData
. De vérifier la disponibilité du réseau avant d'invoquer asynctask. modifier la ci-dessus en conséquence. il va travailler. Si cela ne fonctionne pas je ne sais pas en quoi je peux vous aider davantage.Votre JSONParser s'étend de l'activité, mais ce n'est pas une activité. Supprimer la s'étend de l'Activité et de l'appeler comme un objet.
Vous aurez également besoin de supprimer l'Activité s'étend à partir de votre InternetCheck classe.
Puis passer à votre contexte, à la JSONData de la classe et de l'utilisation de votre InternetCheck classe comme ceci
Puis dans votre InternetCheck classe d'accepter le contexte dans le constructeur et remplacer tous les
avec votre
context
variableEssayer de changer: