私はかなり長い間コードを理解しようとしてきましたが、成功しませんでした。ランダムな例外をスローしてアプリがクラッシュするたび。
私はYouTubeのチュートリアルからこのコードを学びましたが、それにもかかわらず、コードは私には機能しません。
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はこれを示しています:
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
URLプロトコルは[〜#〜] http [〜#〜]であり、[〜#〜] https [〜#〜]ではないことに注意してください。 Java.net.HttpURLConnectionオブジェクトまたは "https:// ..."URLを使用してみてください。
.getResponseCode()
や、...などの特定のメソッドがアプリで必要ない場合は、汎用のURLConnection
クラスも使用できます。これにより、この種の例外の導入は控えられます。どういうわけか、それはHttpURLConnection
クラスとHttps ...クラスの両方の親クラスだからです。