Android Studio :FATAL EXCEPTION: Thread-2

Android Studio :FATAL EXCEPTION: Thread-2

我在编辑设计注册界面的时候,出现的这个问题,如上 ,系统总是报错,但我不知道我写的程序哪里错了,请指点!

我这段代码主要是向网站提交请求,然后注册账号,并保存token在本地。但是每次点击运行都会闪退,并弹出如题所示的报错,查询无果,所以在此询问。


```java
  private void sendRequestWithokhttp() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client = new OkHttpClient();
                javaBean.setName(name);
                javaBean.setPassword(password);
                String json = new Gson().toJson(javaBean);
                RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), json);
                Request request = new Request.Builder()
                        .url("https://**************(保密)")
                        .addHeader("Content-Type", "application/json;charset=UTF-8")
                        .post(requestBody)
                        .build();
                Response response = null;
                try {
                    response = client.newCall(request).execute();
                    if (response.isSuccessful()) {
                        responseData = response.body().string();
                        LoginClass loginClass = new Gson().fromJson(responseData, LoginClass.class);
                        SharedPreferences sp = getSharedPreferences("loginToken", MODE_PRIVATE);
                        SharedPreferences.Editor editor = sp.edit();
                        editor.putString("userName", javaBean.getName());
                        editor.putString("password", javaBean.getPassword());
                        editor.putString("Log_Information", loginClass.getData());
                        editor.apply();
                        Log.e("MainActivity", "+++++++++++" + loginClass.getData());
                        
                        finish();
                    } else {
                   
                    }
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }).start();
    }


回答不易,求求您采纳点赞哦 感激不尽

根据报错信息 "FATAL EXCEPTION: Thread-2" 可以看出,问题出现在一个名为 "Thread-2" 的线程中,可能是由于网络请求的代码没有正确处理在主线程之外运行的情况导致的。

Android应用的UI更新必须在主线程上进行,因此在进行网络请求时,如果直接在UI线程中发起请求,可能会导致应用无响应或崩溃。为了避免这种情况,可以使用异步线程来处理网络请求,但是结果需要在主线程上处理。在这种情况下,你可以使用Android提供的Handler或AsyncTask类来处理结果。

以下是使用Handler处理网络请求结果的示例代码:

private void sendRequestWithokhttp() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            // 发起网络请求
            OkHttpClient client = new OkHttpClient();
            javaBean.setName(name);
            javaBean.setPassword(password);
            String json = new Gson().toJson(javaBean);
            RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), json);
            Request request = new Request.Builder()
                    .url("https://**************(保密)")
                    .addHeader("Content-Type", "application/json;charset=UTF-8")
                    .post(requestBody)
                    .build();
            Response response = null;
            try {
                response = client.newCall(request).execute();
                if (response.isSuccessful()) {
                    responseData = response.body().string();
                    LoginClass loginClass = new Gson().fromJson(responseData, LoginClass.class);
                    SharedPreferences sp = getSharedPreferences("loginToken", MODE_PRIVATE);
                    SharedPreferences.Editor editor = sp.edit();
                    editor.putString("userName", javaBean.getName());
                    editor.putString("password", javaBean.getPassword());
                    editor.putString("Log_Information", loginClass.getData());
                    editor.apply();
                    Log.e("MainActivity", "+++++++++++" + loginClass.getData());

                    // 在主线程上更新UI
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            finish();
                        }
                    });
                } else {
                    // 请求失败的处理
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }).start();
}


在这个示例代码中,我们使用了 runOnUiThread() 方法在主线程上更新UI。

当然,还有其他的方式来处理这个问题,比如使用AsyncTask等。但是不管哪种方式,关键是要避免在主线程上进行耗时操作,以免导致应用无响应或崩溃。