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
Veuillez noter que votre protocole d'URL estHTTPet nonHTTPS. Essayez d’utiliser un Java.net.HttpURLConnection object ou un "https: // ..." URL.
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.