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()
–
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.