android - NullPointerException getApplicationThread()
问题描述
我试图从我的 HttpClient 类中打开一个新的意图,但我得到一个 getApplicationThread() 错误。我不确定是什么意思以及如何解决这个问题。
public class MainActivity extends AppCompatActivity {
public static Context appContext;
private HttpClient HttpClient = new HttpClient();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
appContext = getApplicationContext();
HttpClient.buildClient();
}
public static Context getAppContext() {
return appContext;
}
公共类 HttpClient 扩展 AppCompatActivity {
Call<Post> call = jsonApi.getPosts(GlobalConstants.template, GlobalConstants.Device_id, "NL", 4, 1);
call.enqueue(new Callback<Post>() {
@Override
public void onResponse(Call<Post> call, Response<Post> response) {
if (response.isSuccessful() == false){
//todo
return;
}
Intent i = new Intent(MainActivity.getAppContext(), QuestionActivity.class);
startActivity(i);
finish();
}
解决方案
问题是这两个部分:
HttpClient extends AppCompatActivity
和
private HttpClient HttpClient = new HttpClient()
你永远不应该自己实例化一个活动类。这对任何你想要的活动都没有好处。例如,为消息处理设置活动线程。
首先,HttpClient 不应该是一个活动。
然后,当您的网络请求完成时执行操作的一种方法是在@Sana 的答案中进行回调。
推荐阅读
- php - 自引用类属性的学说映射
- javascript - 将字符串每 2 个字符拆分为数组
- java - 让 JTextField 自动调整大小
- bash - 如何让脚本运行实时服务器并在此之后执行命令?
- java - Iterator for Java Framework Collection 的不同结果
- java - 创建名为“projectingArgumentResolverBeanPostProcessor”的 bean 时出错
- php - 带有 Bootstrap 弹出框的 PHP 不呈现按钮和表单
- ceph - Ceph-Mgr-Dashboard 不适用于 Ceph Naultilus 版本
- laravel - 如何在 Laravel 5.8 中安装我的包?“您的要求无法解决为一组可安装的软件包。”
- r - 将微数据从 IPUMS 读入 R 的问题