【问题标题】:''intent.getExtras().getString'' app crashes when reopen''intent.getExtras().getString'' 应用程序在重新打开时崩溃
【发布时间】:2018-01-05 14:32:19
【问题描述】:

当我将一个变量从一个活动传递到另一个活动时,一切正常,但是 当我退出应用并重新打开它时,应用会崩溃。

我认为这行代码从以前的活动中获取变量。

String codice = intent.getExtras().getString("idinput");

我尝试使用这样的固定变量进行测试,应用程序没有崩溃。

String codice = "value";

这是完整的代码:

        @Override
        protected String doInBackground(Void... voids) {
            try {
                Intent intent = getIntent();
                String codice = intent.getExtras().getString("idinput");

                Uri.Builder urlBuilder = new Uri.Builder();
                urlBuilder.scheme("http");
                urlBuilder.authority("myaddress");
                urlBuilder.appendEncodedPath("file.php");
                urlBuilder.appendQueryParameter("value", codice);
                URL url = new URL(urlBuilder.build().toString());

                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String json;

                while ((json = bufferedReader.readLine()) != null) {
                    sb.append(json + "\n");
                }
                return sb.toString().trim();

            } catch (Exception e) {
                return null;
            }
        }

变量取自的先前活动:

Intent i = new Intent(ControlloCodice.this, Visualizza.class);
            i.putExtra("idinput", inputname);
            startActivity(i);

解决了这个问题

Intent intent = getIntent();
                String codice = intent.getExtras().getString("idinput");

有了这个

String codice;
                try {
                    codice = getIntent().getExtras().getString("idinput");
                } catch (NullPointerException e ) {
                    codice = "";
                }

【问题讨论】:

  • 怎么崩溃了,是日志里的异常?
  • java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.lang.String.length()”
  • 查看堆栈跟踪并找出问题的确切位置,单元测试也不会受到伤害
  • 但是如果我猜你用这个catch 掩盖了真正的异常并且返回了null 并导致程序的另一部分出现问题,那么这不是处理问题的好方法例外,至少您应该记录消息,同时捕获广泛的Exception 可能会导致问题
  • 谢谢。解决了。我用解决方案更新答案。

标签: java android-studio


【解决方案1】:

您应该尝试检查:

if (intent.getExtras() != null) {
    //use getString here
}

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 2014-01-30
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多