E / AndroidRuntime(致命异常:Android的AsyncTask#1 ERROR)

沉舟侧畔千帆进,病树前头万木春。这篇文章主要讲述E / AndroidRuntime:致命异常:Android的AsyncTask#1 ERROR相关的知识,希望能为你提供帮助。
我的代码如下。它在android Studio中出错。有人请帮助我。我的php代码没问题,但为什么会出现这个错误?
【E / AndroidRuntime(致命异常:Android的AsyncTask#1 ERROR)】register.java

import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class Register extends AppCompatActivity { EditText et_name, et_number; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); et_name = (EditText) findViewById(R.id.nametxt); et_number = (EditText) findViewById(R.id.numbertxt); }public void userReg(View view){String names = et_name.getText().toString(); String numbers = et_number.getText().toString(); String method = "register"; BackgroundTask backgroundTask = new BackgroundTask(this); backgroundTask.execute(method,names,numbers); finish(); } }

而我的Background.java代码是
import android.content.Context; import android.net.Uri; import android.os.AsyncTask; import android.widget.Toast; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import javax.net.ssl.HttpsURLConnection; public class BackgroundTask extends AsyncTask< String,Void,String> {Context ctx; BackgroundTask(Context ctx){this.ctx = ctx; }@Override protected void onPreExecute() { super.onPreExecute(); }@Override protected String doInBackground(String... params) { String reg_url = "http://192.168.1.2/logins/register.php"; String method = params[0]; if(method.equals("register")){String name = params[1]; String number = params[2]; try { URL url = new URL(reg_url); HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection(); httpsURLConnection.setRequestMethod("POST"); httpsURLConnection.setDoOutput(true); OutputStream os = httpsURLConnection.getOutputStream(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(os,"UTF-8")); String data = https://www.songbingjia.com/android/URLEncoder.encode("names","UTF-8")+"="+URLEncoder.encode(name,"UTF-8")+"& " +URLEncoder.encode("numbers","UTF-8")+"="+URLEncoder.encode(number,"UTF-8"); bufferedWriter.write(data); bufferedWriter.flush(); bufferedWriter.close(); os.close(); InputStream IS = httpsURLConnection.getInputStream(); IS.close(); return "Registration Success..."; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}return null; }@Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); }@Override protected void onPostExecute(String result) { Toast.makeText(ctx,result,Toast.LENGTH_LONG).show(); } }

我的Androidmanifest.xml是
< uses-permission android:name="android.permission.INTERNET" /> < uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> < uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

Android Studio错误是:
E / AndroidRuntime:FATAL EXCEPTION:AsyncTask#1进程:com.example.smtanverhossain.myphpmysqlapplication,PID:5445 java.lang.RuntimeException:在android.os.AsyncTask $ 3.done(AsyncTask.java)上执行doInBackground()时发生错误:300)at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)at java.util.concurrent.FutureTask.setException(FutureTask.java:222)at java.util.concurrent.FutureTask.run(FutureTask。 java:242)在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)java.util.concurrent.ThreadPoolExecutor $ Worker。在java.lang.Thread.run上运行(ThreadPoolExecutor.java:587)(Thread.java:818)引起:java.lang.ClassCastException:com.android.okhttp.internal.http.HttpURLConnectionImpl无法强制转换为javax.net com.example.smtanverho的com.example.smtanverhossain.myphpmysqlapplication.BackgroundTask.doInBackground(BackgroundTask.java:46)中的.ssl.HttpsURLConnection在Android的java.util.concurrent.FutureTask.run(FutureTask.java:237)的android.os.AsyncTask $ 2.call(AsyncTask.java:288)上的ssain.myphpmysqlapplication.BackgroundTask.doInBackground(BackgroundTask.java:19)。 os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:587) )在java.lang.Thread.run(Thread.java:818)
答案该错误在日志中解释:Caused by: java.lang.ClassCastException: com.android.okhttp.internal.http.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection
这意味着您无法在此行投射到HttpsURLConnection
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

这是因为您的URL使用HTTP而不是HTTPS。当你用url.openConnection()调用HTTP时,它返回一个HttpURLConnection,同样适用于HTTPS。这在documentation中说明。
解决方案应该是用HttpsURLConnection替换所有HttpURLConnection并将铸件移除到HttpsURLConnection
另一答案@Tohu的解决方案可能会解决你的强制转换错误,我想把你带到你的视线,你正在通过调用finish()将你正在破坏的活动的上下文传递给asynktask,这可能会给你一个错误用活动背景显示烤面包。因此,请确保提供有效的上下文,例如: - 。
getApplicationContext()


    推荐阅读