IllegalStateException“系统服务在 onCreate() 之前不可用于活动”

2024-01-01

我调查了这个问题,但找不到适合我的代码的任何解决方案。我有四节课。但我确信,名为 Connect 的类没有问题(您将在下面的 JsonData 类上看到它的对象。)所以我共享其他三个类。我的主要活动是;

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();
    }
}

我发送 json 的键值,然后从 JsonData 类上的任何 url(它是私有的,我删除它)获取数据;

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;

    }
}

在本课程中,我从对象 netCheck 检查互联网连接。我认为我的问题出在那个班级上。互联网检查.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;
    }
}

我从注释行 **//get Connectivity Manager object to check connection ** 中怀疑。 最后是我的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)

我再说一遍,我查看了其他问题,但没有适合我的解决方案。提前致谢。


InternetCheck是一个 Activity 类。活动开始于startActivity. getSystemService需要活动上下文。

http://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String) http://developer.android.com/reference/android/content/Context.html#getSystemService(java.lang.String)

你有这个

public class JsonData extends Activity

而你这样做

JsonData jsonData = new JsonData(); //Activity is started by `startActivity`
// wrong  

您需要的是实用程序类而不是活动类。另外,如果您正在进行网络相关操作,请在thread or Asynctask

public class CheckNetwork {


    private static final String TAG = CheckNetwork.class.getSimpleName();



    public static boolean isInternetAvailable(Context context)
    {
        NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
        context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

        if (info == null)
        {
             Log.d(TAG,"no internet connection");
             return false;
        }
        else
        {
            if(info.isConnected())
            {
                Log.d(TAG," internet connection available...");
                return true;
            }
            else
            {
                Log.d(TAG," internet connection");
                return true;
            }

        }
    }
}

签入任何活动

 if(CheckNetwork.isInternetAvailable(ActivityName.this)) 
 // use activity context
 // will return true if network connection is available.

您可能已连接到 wifi,但 wifi 可能无法连接到网络。这仅检查网络连接可用性。

Edit:

    public class MainActivity extends Activity {

        String keys[] = {"Message", "Subject", "MessageType", "SentTime", "ToName", "Id"};
        ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                if(CheckNetwork.isInternetAvailable(MainActivity.this)) 
                {
            JsonData jsonData = new JsonData();
            jsonData.execute();
                }else
                 {
                  //display toast no network connection available
                 }   

        }

        public void getData()
        {

                // get json data from url and it to dataList   

            }
  class JsonData extends AsyncTask<Void,Void,Void>{
  private String url = "url"; 

    @Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    // dismiss progress dialog
    // update ui
}

@Override
protected void onPreExecute() {
    // TODO Auto-generated method stub
    super.onPreExecute();
    // display progress dialog
}

    @Override
    protected Void doInBackground(Void... params) {
      getData(); // get data
       // network related operation
       //  do not update ui here.             
    return null;
    }
    }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IllegalStateException“系统服务在 onCreate() 之前不可用于活动” 的相关文章

  • 如何在从另一个活动调用一个活动时延迟一些?

    我有一个应用程序 其中我正在接收包含他的位置的短信 收到短信后 它会调用另一个活动来启动并将该位置传递给该活动以将其绘制在地图上 在调用第二个活动之前 它会显示一个类似于通知的吐司在屏幕上 但由于调用第二个活动 吐司没有出现 我的问题是我们
  • onSaveInstanceState 之后无法执行此操作(onClick 首选项)

    这是我的PreferenceActivity 我的主要活动的内部类 public static class TestSettings extends PreferenceActivity implements Preference OnPr
  • 字符串生成器最大长度

    我想知道字符串生成器 或字符串缓冲区 的最大容量是多少 我的 Android 应用程序中有一个静态变量 它应该保存日志字符串 它最多可以容纳 130 行和大约 10000 个字符 我如果我附加更多内容 但它只是不显示 没有错误 没有例外 所
  • 如何在谷歌地图中使用latlng字符串数组绘制多边形

    在我的应用程序中 我有包含 imagview 的 recyclerview 并且该 imageview 通过使用我存储在 sqlite 中的坐标包含静态地图图像 当我单击该图像时 我将该字符串数组格式的坐标传递给其他地图活动 然后使用该字符
  • 无法创建变体“android-manifest-metadata”

    我在 Playstore 上上传了我的应用程序 bundle aab 方法 它在 android 6 0 上运行正常 没有错误 但在 android 7 0 设备上出现错误 并且无法运行该应用程序 我使用了 Gradle 构建类路径 3 1
  • 如何知道 TTS 何时完成?

    我正在 Android 上实现交互式语音响应应用程序 我想知道如何确定何时tts speak 函数已完成通话 因此我可以调用我的语音识别器函数 public class TTSActivity extends Activity implem
  • 在android中点击地图获取坐标

    我正在尝试做这样的事情 我有一个地图活动 当用户点击地图时 它会显示该位置的坐标 我已经重写了 onclick 方法 但它甚至没有被调用 任何想法 public class MapPoint extends MapActivity impl
  • 如何删除旧版本的Android Studio

    我必须释放硬盘中的一些空间 并寻找要删除的内容 我发现我有许多引用旧版本的 Android Studio AS 文件夹 我发现文件夹的路径是 C Users mysuername 我想要的是删除旧版本并只保留最新版本的方法 当时是 ASPr
  • Kotlin + Room:java.lang.IllegalArgumentException:void 无法转换为元素

    我试图在我的 Java Kotlin 项目中添加 Room 但是当我尝试编译该项目时 它失败了 app kaptDebugKotlin出现以下错误 e java lang IllegalStateException failed to an
  • ArgumentMatchers.any 不得为 null

    我正在尝试测试ViewModel以确保实时数据得到正确更新 然而使用时ArgumentMatchers any 它失败了IllegalStateException saying ArgumentMatchers any mViewModel
  • 当我转到下一个活动并再次返回时,如何恢复活动的值?

    我希望当用户返回我的第一个活动时恢复编辑文本的值 请帮帮我 提前致谢 这是我的第一个活动代码 用于在编辑文本中获取用户值 public class IntentActivity extends Activity EditText ed1 e
  • 是否有 Ubuntu 10.04 存储库可以下载最新版本的 Eclipse?

    我还没有找到一个可以安装 Eclipse 4 2 Juno 的软件 默认的 Ubuntu 存储库 我使用的是 Ubuntu 10 04 建议我使用古老的 Galileo 版本 我在 Launchpad 上找到了 Eclipse 的页面 该页
  • 将 XML 从网站解析到 Android 设备

    我正在启动一个 Android 应用程序 它将解析来自网络的 XML 我创建了一些 Android 应用程序 但它们从未涉及解析 XML 我想知道是否有人对最佳方法有任何建议 这是一个例子 try URL url new URL your
  • 更改适配器数据时,RecyclerView 滚动到顶部位置

    我正在对某个帖子进行喜欢和不喜欢RecyclerView 我在更改视图后调用api 但问题是RecyclerView当我通知它更新时 总是滚动到顶部 这是我的适配器代码 likeAnim setOnLikeListener object O
  • Xamarin.Android JmDNS 绑定问题

    我开始研究 Xamarin Android 的 JmDNS 绑定 我设法构建了绑定 但无法从代码中引用它 https github com ytn3rd monodroid bindings tree master JmDNS https
  • 具有通用类的自定义 Android 适配器

    我正在尝试在 Android 中创建一个通用适配器 所以我不能一遍又一遍地编写它 问题是 它正在工作 但它的回收效果不是很好 它显示了我想要的内容 但是当我滚动时 它的顺序不同 public class CustomListViewAdap
  • Android:适合SystemWindows和换行符干扰bottomSheets

    我发现如果父布局包含android fitsSystemWindows true 当发生与视图相关的操作时 它会干扰我的 BottomSheets 定位 具体来说 我遇到的是 文本视图中的换行符将触发底页偏移系统 通知栏的高度 换行符 fi
  • 使 autocompletetextview 看起来像 edittext

    我正在使用 AutoCompleteTextView Roboto 自动完成文本视图 https github com johnkil Android RobotoTextView blob master robototextview sr
  • 如何从 Anaconda 更新 Pandas 以及最后是否可以使用 eclipse

    我已经使用以下文档通过 Anaconda 安装了 Python http www kevinsheppard com images 0 09 Python introduction pdf http www kevinsheppard co
  • 在 Android 中将列表传递给另一个 Activity

    我已经创建了一个列表 并希望将该列表传递给另一个活动 但当我创建意图时 我在 putExtra 语句上收到错误 只是想知道是否有任何简单的方法来传递字符串列表而不是单个字符串 Thanks private List

随机推荐

  • 当过滤器存在时使用数组设置范围值

    我想将某个范围的值获取到一个数组中 处理数组数据 然后将该数组中的值设置回它来自的范围 考虑到该范围可能包含一些隐藏行 让我们以两列的工作表为例 A B VALUE FILTER 1 P 2 N 3 N 4 P 5 P 然后应用自动过滤器并
  • 如何正确编写 int、double、float 等的数学扩展方法?

    我想编写一系列扩展方法来简化数学运算 例如 代替 Math Pow 2 5 我希望能够写 2 Power 5 在我看来 这更清楚 问题是 在编写扩展方法时如何处理不同的数字类型 我需要为每种类型编写一个扩展方法吗 public static
  • 如果满足条件,Reactor如何重复某个步骤n次

    请帮我处理反应堆 我需要检查一个条件最多n次并返回最终结果 我发现reactor有reactor extra模块 https projectreactor io docs extra snapshot api reactor retry R
  • 比较两个文本文件并将差异写入文本文件

    我想比较两个文本文件并将差异输出到另一个文本文件中 Location c temp z txt compare object get content c temp hostname old txt get content c temp ho
  • 这句话是什么意思

    unlike SwingUtilities invokeAndWait the event thread is permitted to call SwingUtilities invokeLater 我无法清楚地理解这一点 请帮助我 另一
  • Angular 6 router - 替换当前路由的一些参数

    在我的 Angular 6 解决方案中 网址具有以下结构 语言 app section object id view queryparams 语言选择器组件由应用程序的所有部分共享 并且包含在父路由之一的模板中 以便它出现在所有子路由中 当
  • 如何使用 xlwings 保存工作簿?

    我有一个 Excel 工作表 一些按钮和一些宏 我使用 xlwings 来使其工作 有没有办法通过 xlwings 保存工作簿 我想在执行操作后提取特定的工作表 但保存的工作表是操作前提取的工作表 没有生成的数据 我提取所需工作表的代码如下
  • PowerShell 帮助文件无法正确显示

    在 Windows 10 和 Windows Server 2012 上的 PowerShell 4 0 5 0 中进行了测试 clear help wmiobject or cls man job 清除屏幕后 帮助文件无法正确显示结果 重
  • Pandas 的 concat 函数中的“级别”、“键”和名称参数是什么?

    问题 我该如何使用pd concat 是什么levels论据 是什么keys论据 是否有很多示例可以帮助解释如何使用所有参数 Pandas concat函数是瑞士军刀 https en wikipedia org wiki Swiss Ar
  • 是否可以清除 Ionic 中的视图缓存?

    我目前正在开发 Angular Ionic Cordova 项目 我们最近升级到了最新的 Ionic beta 从项目之前使用的版本开始 这里引入了视图缓存 然而这样做也带来了一个问题 该应用程序面向客户 并且非常以数据为中心 然而 目前用
  • ng-repeat 中的角度验证不起作用

    我很难使用 ng repeat 语句进行验证 我有以下代码 我只是希望当名称字段为空时将 has error 添加到 div form group 中 我似乎无法让它发挥作用 有什么想法吗 我在小提琴手中的尝试 http jsfiddle
  • Admob 在 Google Admob 面板中找不到转账资金链接 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 google admob 中找不到转账资金链接 我的余额超过 50 美元 并且我的付款信息已填写完整 但我无法转账 请帮助 我在哪里
  • 如何检查网站是否支持 HTTP/2 协议

    关于这个问题有很多话题HTTP 2 https en wikipedia org wiki HTTP 2协议 但我想知道是否有一个使用该协议的工作网站 I e 我们可以决定使用http or https 但是我们如何编写 HTTP 2 请求
  • 为什么我无法关闭 Hibernate SessionFactory 并重新打开它并且它仍然可以工作?

    我在关闭 Hibernate 会话工厂时遇到问题 我的应用程序允许用户重新创建数据库 因此当他们想要这样做时 我首先关闭 Hibernate 会话工厂以释放 Hibernate 对数据库的控制 public static void clos
  • 在 VBS 脚本中使用 SAPI 语音识别?

    我发现这个一行示例允许在 VBScript 中使用 Windows SAPI 文本转语音功能 CreateObject SAPI SpVoice Speak This is a test 我想知道 SAPI 语音识别是否可以以同样简单的方式
  • cassandra获取时间范围内的所有记录

    我必须使用以 user id 时间戳 作为键的列族 在我的查询中 我想获取给定时间范围内的所有记录 与 user id 无关 这是确切的表架构 CREATE TABLE userlog user id text ts timestamp a
  • UrlFetchApp.fetch() google.com 上的内容不完整

    我从 Google Apps 脚本编码开始 所以我尝试了这个例子 获取 网址 https developers google com apps script reference url fetch url fetch app hl de f
  • Android 中的 OpenGL 入门...

    我是一位经验丰富的 Android 开发人员 如果存在的话 以前从未使用过 OpenGL Android 平台的各种优势 开源 开放分发 可移植等 使我认为它可能是最终进入 OpenGL 的绝佳环境 但我也担心 对于以前从未使用过 3D 图
  • 上传后使用 LiipImagineBundle 调整图像大小?

    我正在使用LiipImagine捆绑包 https github com liip LiipImagineBundle使用 Symfony 2 1 并希望在上传时调整用户上传的图像大小 然后将其保存到永久文件系统位置 以剥离元数据 强制 j
  • IllegalStateException“系统服务在 onCreate() 之前不可用于活动”

    我调查了这个问题 但找不到适合我的代码的任何解决方案 我有四节课 但我确信 名为 Connect 的类没有问题 您将在下面的 JsonData 类上看到它的对象 所以我共享其他三个类 我的主要活动是 public class MainAct