gpt4 book ai didi

android - 主线程上的网络连接 - 在这种情况下的替代方案?

转载 作者:行者123 更新时间:2023-11-29 17:01:35 30 4
gpt4 key购买 nike

我需要在服务器中获取一种颜色并将其设置为主题

setTheme(colorId);

它需要在 onCreate() 中设置,并在开始时起作用。

我这样做:

    protected void onCreate(Bundle savedInstanceState) {

getColor();
...
}

public void getColor() {

StrictMode.ThreadPolicy tp = StrictMode.ThreadPolicy.LAX; //force network on main thread
StrictMode.setThreadPolicy(tp);

OkHttpClient client = new OkHttpClient();
okhttp3.Request request = new okhttp3.Request.Builder()
.url("http://myip/color.php")
.build();
try {
okhttp3.Response response = client.newCall(request).execute();

String color = response.body().string();
setTheme(color);

} catch (IOException e) {
e.printStackTrace();
}
}
}

因此,我在主线程上强制建立网络连接,因为如果我添加 doInBackground(),响应... 它将在我的 onCreate() 之后运行并且不会设置颜色。

我的问题是:

1)这是唯一的方法吗?

2) 我可以在主线程上不强制网络的情况下做事吗?

3) 如果可能的话,我想要一个例子,而不仅仅是:“是的,这是可能的”或“做 XYZ”,因为我是 Android 的新手,没有例子它没有多大帮助。

最佳答案

您不应该在主线程上发出任何网络请求。相反,当用户在后台线程上获取数据时,您应该向用户显示一个进度条。

但是:由于您必须在 onCreate() 中设置主题,这意味着您无法向用户显示任何进度,因为此时 View 不会膨胀。更好的解决方案是从服务器获取先前 Activity 的颜色并将其作为 Intent 参数传递。

关于android - 主线程上的网络连接 - 在这种情况下的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42573668/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com