小编Rab*_*ant的帖子

返回活动时丢失Intent额外内容

我有一个流程大致的应用程序:

  • 启动主要活动,输入一些数据
  • 启动活动A,在Intent中传递单个字符串
  • 活动A使用String并为用户提供一些选项
  • 有时使用将启动活动B(在背景中留下A)
  • 当用户从活动B返回时,重新创建活动A(调用onCreate); 我假设它已被删除以节省内存
  • getIntent()返回的intent不会将数据传递给Activity A的原始实例

我知道第一次调用时数据是存在的,因为如果不是,应用程序就会死掉.

我知道当用户返回活动A(通过'后退'键)时数据不存在,因为应用程序死了(来自onCreate()的extras.getString(...)的空指针).

这是预期的行为吗?

我应该在onSaveInstanceState()中保存extras包的内容吗?

编辑:下面的代码片段:

主要活动使用以下内容启动新活动:

Intent i = new Intent(a, BookISBNSearch.class);
i.putExtra(BookISBNSearch.BY, "isbn");
a.startActivityForResult(i, R.id.ACTIVITY_CREATE_BOOK_ISBN);
Run Code Online (Sandbox Code Playgroud)

BookISBNSearch中的onCreate读取:

...
Bundle extras = getIntent().getExtras();
mIsbn = extras.getString("isbn");
String by = extras.getString(BY);
...
Run Code Online (Sandbox Code Playgroud)

稍后使用它:

if (mIsbn != null) {
    ....do some stuff....
} else if (by.equals("isbn")) {
    ....do some other stuff....
Run Code Online (Sandbox Code Playgroud)

用户可以从BookISBNSearch开始另一个活动.启动新活动的代码是:

/*
 * Start scanner activity.
 */
private void startScannerActivity() {
    if (mScannerIntent == null) {
        mScannerIntent = new Intent("com.google.zxing.client.android.SCAN");
    }
    if (!mScannerStarted) …
Run Code Online (Sandbox Code Playgroud)

java android

11
推荐指数
1
解决办法
2808
查看次数

在 Android Studio 中调试动态加载的本机库?

我有一个看起来像这样的项目:

- project
    - app
       - src.../cpp/
       - src.../java/
    - other modules...
Run Code Online (Sandbox Code Playgroud)

cpp代码是在build.gradle中使用cmake构建的:

externalNativeBuild {
    cmake {
        path "CMakeLists.txt"
    }
}
Run Code Online (Sandbox Code Playgroud)

buildTypes {
   ...
    debug {
        debuggable true
        jniDebuggable true
        externalNativeBuild {
            cmake {
                arguments "-DCMAKE_BUILD_TYPE=Debug"
                abiFilters "armeabi-v7a", "armeabi", "x86"
            }
        }
    }
}

productFlavors {
    ...
    experimental {
        externalNativeBuild {
            cmake {
                targets "sqlite_gcd_func"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其中 CMakeLists.txt 是:

cmake_minimum_required(VERSION 3.6)

add_library( # Specifies the name of the library.
         sqlite_gcd_func
         # Sets the library as a …
Run Code Online (Sandbox Code Playgroud)

c++ android cmake gradle lldb

5
推荐指数
1
解决办法
3100
查看次数

Mojo::UserAgent 无法验证证书,而 LWP::UserAgent 成功

我有一个简单的 perl 脚本,它使用 LWP::UserAgent 连接到安全站点。效果很好。当我使用 Mojo::UserAgent 时,它无法验证证书。这是可靠且可重复的。基本的 Perl 代码是:

use strict;
use warnings;
use IO::Socket::SSL 1.980;
use LWP::UserAgent;
use Mojo::UserAgent;

$IO::Socket::SSL::DEBUG=3;

my $dst = "<DOMAIN>";
my $url = "<URL-AT-DOMAIN>";

my $A_OR_B = 1;

my $ua;

if ($A_OR_B) {
    $ua = Mojo::UserAgent->new();
    $ua->connect_timeout(20);
} else {
    $ua = LWP::UserAgent->new();
}

my $resp = $ua->get($url);

if ($A_OR_B) {
    print $resp->result->message;
    print $resp;
} else {
    print $resp->status_line."\n";
}
Run Code Online (Sandbox Code Playgroud)

IO::Socket 调试的输出是:

对于 Mojo(失败):

DEBUG: .../IO/Socket/SSL.pm:3010: new ctx 48892560
DEBUG: .../IO/Socket/SSL.pm:1638: don't start handshake: …
Run Code Online (Sandbox Code Playgroud)

perl ssl lwp-useragent mojolicious

2
推荐指数
1
解决办法
293
查看次数

标签 统计

android ×2

c++ ×1

cmake ×1

gradle ×1

java ×1

lldb ×1

lwp-useragent ×1

mojolicious ×1

perl ×1

ssl ×1