web-dev-qa-db-fra.com

Comment connecter Android avec HTTPsURLConnection

J'essaie de comprendre le code depuis assez longtemps, mais je n'ai pas réussi. Chaque fois que l'application se bloque en lançant une exception aléatoire. 

J'ai appris ce code grâce à un tutoriel sur youtube et malgré cela, le code ne fonctionne pas pour moi.

import Android.content.Context;
import Android.net.ConnectivityManager;
import Android.net.NetworkInfo;
import Android.os.AsyncTask;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.Button;
import Android.widget.TextView;
import Android.widget.Toast;

import org.w3c.dom.Text;

import Java.io.BufferedReader;
import Java.io.IOException;
import Java.io.InputStream;
import Java.io.InputStreamReader;
import Java.net.MalformedURLException;
import Java.net.URL;
import Java.nio.Buffer;

import javax.net.ssl.HttpsURLConnection;

public class MainActivity extends AppCompatActivity {
Button b1;
TextView t1;
private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b1=(Button)findViewById(R.id.bthhit);
    t1=(TextView)findViewById(R.id.tvJSONitem);

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new JSONTask().execute("http://jsonparsing.parseapp.com/jsonData/moviesDemoItem.txt");
        }
    });

}

public class JSONTask extends AsyncTask<String,String,String>{
    HttpsURLConnection connection = null;
    BufferedReader reader = null;

    @Override
    protected String doInBackground(String... params) {

        try {
            URL url=new URL(params[0]);
            connection= (HttpsURLConnection)url.openConnection();
            connection.connect();

            InputStream stream= connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));
            String line;
            StringBuffer buffer= new StringBuffer();
            while((line=reader.readLine())!=null){
                buffer.append(line);
            }

            return buffer.toString();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(connection!=null) {
                connection.disconnect();
            }
            try {
                if(reader!=null){
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        t1.setText(result);

    }
}
}

Logcat montre ceci:

01-05 00:46:09.018 5573-5580/? E/art: Failed sending reply to debugger: Broken pipe
01-05 00:46:17.852 5573-5706/com.example.test.jsonparser E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
   Process: com.example.test.jsonparser, PID: 5573
   Java.lang.RuntimeException: An error occurred while executing doInBackground()
       at Android.os.AsyncTask$3.done(AsyncTask.Java:309)
       at Java.util.concurrent.FutureTask.finishCompletion(FutureTask.Java:354)
       at Java.util.concurrent.FutureTask.setException(FutureTask.Java:223)
       at Java.util.concurrent.FutureTask.run(FutureTask.Java:242)
       at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:234)
       at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1113)
       at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:588)
       at Java.lang.Thread.run(Thread.Java:818)
    Caused by: Java.lang.ClassCastException: com.Android.okhttp.internal.huc.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection
       at com.example.test.jsonparser.MainActivity$JSONTask.doInBackground(MainActivity.Java:58)
       at com.example.test.jsonparser.MainActivity$JSONTask.doInBackground(MainActivity.Java:49)
       at Android.os.AsyncTask$2.call(AsyncTask.Java:295)
       at Java.util.concurrent.FutureTask.run(FutureTask.Java:237)
       at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:234) 
       at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1113) 
       at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:588) 
       at Java.lang.Thread.run(Thread.Java:818) 
01-05 00:46:19.104 5573-5587/com.example.test.jsonparser E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab792110
12
Addy

Veuillez noter que votre protocole d'URL estHTTPet nonHTTPS. Essayez d’utiliser un Java.net.HttpURLConnection object ou un "https: // ..." URL.

22
J-Cint

Si certaines méthodes telles que .getResponseCode() ou, ... ne sont pas nécessaires dans votre application, vous pouvez également utiliser la classe générique URLConnection, ce qui vous évitera d'introduire ce type d'exceptions, car il s'agit de la classe parente pour HttpURLConnection et Https. ... cours en quelque sorte.

0
Reza Hamzehie