android - 从线程中获取字符串值

标签 android string multithreading amazon-dynamodb

我有一个 String 变量,我在一个线程中设置它的值,因为它使用的是网络操作。

如何访问存储在 Strings 中的值?

public class HomeActivity extends AppCompatActivity {

// Initialize AWS DynamoDB Client
public static AmazonDynamoDBClient ddbClient;
public static DynamoDBMapper mapper;
public static Aqua aqua;

// App details
public static String a = "A";
public static String b;
public static Boolean c;
public static String d;
public static String e;
public static String f;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    // Initialize the Amazon Cognito credentials provider
    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(),
            "******", // Identity Pool ID
            Regions.**** // Region
    );

    // Initialize AWS DynamoDB
    ddbClient = new AmazonDynamoDBClient(credentialsProvider);
    mapper = new DynamoDBMapper(ddbClient);

    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                // Get app details
                aqua = mapper.load(Aqua.class, a);
                b = aqua.getB();
                c = aqua.getC();
                d = aqua.getD();
                e = aqua.getE();
                f = aqua.getF();
            } catch (Exception e) {
                Log.e("error", e.getMessage());
            }
        }
    });
    thread.start();
}
}

最佳答案

使用ExecutorService 并提交Callable(下面假设您想​​要存储在b,c,d,e,f 中的数据):

ExecutorService exec = Executors.newSingleThreadExecutor();
Future<String[]> future = exec.submit(new Callable<String[]>() {
    @Override
    public String[] call() {
        try {
            // Get app details
            aqua = mapper.load(Aqua.class, a);
            b = aqua.getB();
            c = aqua.getC();
            d = aqua.getD();
            e = aqua.getE();
            f = aqua.getF();
        } catch (Exception e) {
            Log.e("error", e.getMessage());
        }
        return new String[] {b, c, d, e, f};
    }
});
// ... b will be at value[0], c at value[1]
String[] value = future.get();

关于android - 从线程中获取字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38224524/

相关文章:

android - EditText软数字键盘有时不允许数字

java - 如何在 Android 上使用 PJSIP?

javascript - 如何使用JavaScript将字符串转换为数值(应该是可逆的)?

c++ - Visual Studio C++ : what's creating these threads?

java - JSONObject toString 和 Base64 性能

java - 在不加载 View 的情况下从 fragment 中获取数据

java - 我们将在堆上创建多少个对象?

javascript - 如何使用 Javascript 获取给定字符串中第 n 次出现的一组子字符串?

c++ - ISPC - 我可以将 CPU 线程数限制为 1 吗?

c# - 如何将多个线程同步到一个公共(public)点