Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

My Code is below. It is giving an error in Android Studio. Anyone please help me. My PHP code is OK but why is it giving this 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();

And My Background.java Code is

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 = 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();

And my Androidmainfest.xml is

<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 Error is :

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 Process: com.example.smtanverhossain.myphpmysqlapplication, PID: 5445 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java: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) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at 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 at com.example.smtanverhossain.myphpmysqlapplication.BackgroundTask.doInBackground(BackgroundTask.java:46) at com.example.smtanverhossain.myphpmysqlapplication.BackgroundTask.doInBackground(BackgroundTask.java:19) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  at java.lang.Thread.run(Thread.java:818)

The error is explained in the log: Caused by: java.lang.ClassCastException: com.android.okhttp.internal.http.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection

This means you can't cast to HttpsURLConnection at this line:

HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

The reason for this is because your URL uses HTTP instead of HTTPS. When you call url.openConnection() with HTTP, it returns a HttpURLConnection and same applies for HTTPS. This is stated in the documentation.

The solution should be to replace all HttpsURLConnection with HttpURLConnection and remove the cast to HttpsURLConnection.

The solution by @Tohu might resolve your cast error, something that I want to bring to your sight, you are passing the context of the activity, to the asynktask, that you are destroying by calling finish() , this might give you a error when you to show toast with activity context. So make sure you give a valid context,like:-.

getApplicationContext()
                Check your android version,  you must include the following declaration within the element of AndroidManifest.xml.   developers.google.com/maps/documentation/android-sdk/…
– AgungCode.Com
                Jan 12, 2021 at 16:07
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.