IllegalStateException "System-Dienste nicht zur Verfügung, um Aktivitäten vor der onCreate()"
Untersuche ich, dass problem aber finde keine Lösung für meinen code. Ich habe vier Klassen. Aber ich bin sicher, kein problem auf die Klasse Schließen(Sie werden sehen, Ihr Objekt der Klasse JsonData unten.)Also ich Teile den anderen drei Klassen. Meine MainActivity ist;
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();
}
}
Sende ich keyvalues für json und dann nehmen Sie Daten aus einer beliebigen url(es ist privat, ich es löschen) auf Klasse 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;
}
}
In dieser Klasse, ich überprüfen Sie die internet-Verbindung von Objekt netCheck. Ich denke, mein problem ist das Klasse. 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;
}
}
Ich bin zu Ahnen, aus der auskommentierte Zeile **//- Connectivity-Manager-Objekt, prüfen Sie die Verbindung ** .
Endlich, mein 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)
Ich sage wieder, ich schaute über andere Fragen, aber keine Lösung für mich. Vielen Dank im Voraus.
InformationsquelleAutor Batuhan Coşkun | 2013-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
InternetCheck
ist eine Activity-Klasse. Die Aktivität wird gestartet, indemstartActivity
.getSystemService
erfordert Aktivität Kontext.http://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)
Haben Sie diese
- Und Sie tun dies
Was Sie brauchen, ist eine utility-Klasse, die nicht eine Tätigkeit der Klasse. Auch wenn Sie tun, Netzwerk-Betrieb tun es in einer
thread
oderAsynctask
Überprüfen in jeder Aktivität
Möglicherweise werden Sie wifi-Verbindung, aber WLAN kann keine Verbindung zu net. Diese prüft nur die für die Netzwerk-Verbindung Verfügbarkeit.
Edit:
Sie tun es auch
JsonData jsonData = new JsonData()
. JsonData ist eine Aktivität der Klasse Aktivitäten gestartet werdenstartActivity
mit Absicht. auch` verbinden .connect(url)` alle Netzwerk-bezogene operation durchgeführt werden sollte, die auf einethread
. verwendenthread
oderasynctask
ich verwendet, Debuggen und das problem ist auf InternetCheck Klasse und der Punkt 'Kontext.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();'. Ich bin mir sicher, mit.
das ist ein problem, wenn Sie auf das Netzwerk bezogene operation post honeycomb erhalten Sie
NetworkOnMainThreadException
. überprüfen Sie die Dokumentation developer.android.com/reference/android/os/.... und Sie kontrollieren die bearbeiteten beantworten. ich bin sicher, wenn Sie änderungen vornehmen, wird es funktionierenIch kann das problem nicht lösen, änderte ich InternetCheck-Klasse-codes mit Ihren codes. Ich verwendet startActivity für JsonData Klasse. Aber das gleiche problem besteht weiterhin 🙁
InformationsquelleAutor Raghunandan
Ihre JSONParser erweitert-Aktivität, aber es ist nicht eine Aktivität. Entfernen Sie die erweitert-Aktivität und rufen Sie es als ein Objekt.
Müssen Sie auch entfernen Sie die Tätigkeit erstreckt sich von Ihrem InternetCheck Klasse.
Übergeben Sie dann Ihrem Kontext, um die JSONData-Klasse, und verwenden Sie Ihre InternetCheck Klasse wie diese
Dann im InternetCheck Klasse akzeptieren, den Kontext, in den Konstruktor, und ersetzen Sie alle
mit Ihrem
context
variableFalsch, das ist die Lösung.
InformationsquelleAutor Reid L Skipworth
Versuchen zu ändern:
Sie kann es nicht tun, bevor onCreate, denn es verursacht Fehler.
Das habe ich versucht, dies ist keine Lösung, aber trotzdem danke.
Dies ist nicht die Antwort, denn das problem ist mit JsonData versuchen zu Verhalten, als eine Aktivität, wenn es nicht wirklich ein, und nicht als erstellt.
InformationsquelleAutor akuzma