Webサービスから質問を読み込むアプリを作成しましたが、問題なく機能します。しかし、時々クラッシュし、これが発生する理由がわかりません。特に、必要なアクセス許可も与えているためです。正常に動作しますが、ランダムにクラッシュし、このレポートが表示されます。
private void sendContinentQuestions(int id) {
// TODO Auto-generated method stub
//Get the data (see above)
JSONArray json = getJSONfromURL(id);
try{
for(int i=0; i < json.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject jObject = json.getJSONObject(i);
longitude":"72.5660200"
String category_id = jObject.getString("category_id");
String question_id = jObject.getString("question_id");
String question_name = jObject.getString("question_name");
String latitude = jObject.getString("latitude");
String longitude = jObject.getString("longitude");
String answer = jObject.getString("answer");
String ansLatLng = latitude+"|"+longitude ;
Log.v("## data:: ###",question_id+"--"+question_name+"-cat id-"+category_id+"--ansLatLng "+ansLatLng+" answer: "+answer);
all_question.add(new QuestionData(game_id,category_id,question_id,question_name,ansLatLng,answer));
}
}catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
}
public JSONArray getJSONfromURL(int id){
String response = "";
URL url;
try {
url = new URL(Consts.GET_URL+"index.php/Api/getQuestion?cat_id="+id);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("POST");
InputStream is = http.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
response = br.readLine();
Log.v("###Response :: ###",response);
http.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//try parse the string to a JSON object
JSONArray jArray = null;
try{
jArray = new JSONArray(response);
}catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
return jArray;
}
11-13 15:02:52.307: W/System.err(8012): Java.net.UnknownHostException: Unable to resolve Host "www.xyz.com": No address associated with hostname
11-13 15:02:52.317: W/System.err(8012): at Java.net.InetAddress.lookupHostByName(InetAddress.Java:424)
11-13 15:02:52.317: W/System.err(8012): at Java.net.InetAddress.getAllByNameImpl(InetAddress.Java:236)
11-13 15:02:52.317: W/System.err(8012): at Java.net.InetAddress.getAllByName(InetAddress.Java:214)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:70)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpConnection.<init>(HttpConnection.Java:50)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.Java:340)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.Java:87)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpConnection.connect(HttpConnection.Java:128)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.Java:316)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpEngine.connect(HttpEngine.Java:311)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.Java:290)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.Java:240)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.Java:282)
11-13 15:02:52.317: W/System.err(8012): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.Java:177)
11-13 15:02:52.327: W/System.err(8012): at com.abc.xyz.ContinentActivity.getJSONfromURL(ContinentActivity.Java:400)
11-13 15:02:52.327: W/System.err(8012): at com.abc.xyz.ContinentActivity.sendContinentQuestions(ContinentActivity.Java:327)
11-13 15:02:52.327: W/System.err(8012): at com.abc.xyz.ContinentActivity.access$2(ContinentActivity.Java:323)
11-13 15:02:52.327: W/System.err(8012): at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.Java:254)
11-13 15:02:52.327: W/System.err(8012): at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.Java:1)
11-13 15:02:52.327: W/System.err(8012): at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
11-13 15:02:52.327: W/System.err(8012): at Java.util.concurrent.FutureTask.run(FutureTask.Java:234)
11-13 15:02:52.327: W/System.err(8012): at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:230)
11-13 15:02:52.327: W/System.err(8012): at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1080)
11-13 15:02:52.337: W/System.err(8012): at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:573)
11-13 15:02:52.337: W/System.err(8012): at Java.lang.Thread.run(Thread.Java:841)
11-13 15:02:52.337: W/System.err(8012): Caused by: libcore.io.GaiException: getaddrinfo failed: EAI_NODATA (No address associated with hostname)
11-13 15:02:52.337: W/System.err(8012): at libcore.io.Posix.getaddrinfo(Native Method)
11-13 15:02:52.337: W/System.err(8012): at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.Java:61)
11-13 15:02:52.337: W/System.err(8012): at Java.net.InetAddress.lookupHostByName(InetAddress.Java:405)
11-13 15:02:52.337: W/System.err(8012): ... 24 more
11-13 15:02:52.337: E/log_tag(8012): Error parsing data org.json.JSONException: End of input at character 0 of
11-13 15:02:52.337: W/dalvikvm(8012): threadid=194: thread exiting with uncaught exception (group=0x417c1700)
11-13 15:02:52.337: E/AndroidRuntime(8012): FATAL EXCEPTION: AsyncTask #5
11-13 15:02:52.337: E/AndroidRuntime(8012): Java.lang.RuntimeException: An error occured while executing doInBackground()
11-13 15:02:52.337: E/AndroidRuntime(8012): at Android.os.AsyncTask$3.done(AsyncTask.Java:299)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.util.concurrent.FutureTask.finishCompletion(FutureTask.Java:352)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.util.concurrent.FutureTask.setException(FutureTask.Java:219)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.util.concurrent.FutureTask.run(FutureTask.Java:239)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:230)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1080)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:573)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.lang.Thread.run(Thread.Java:841)
11-13 15:02:52.337: E/AndroidRuntime(8012): Caused by: Java.lang.NullPointerException
11-13 15:02:52.337: E/AndroidRuntime(8012): at com.abc.xyz.ContinentActivity.sendContinentQuestions(ContinentActivity.Java:328)
11-13 15:02:52.337: E/AndroidRuntime(8012): at com.abc.xyz.ContinentActivity.access$2(ContinentActivity.Java:323)
11-13 15:02:52.337: E/AndroidRuntime(8012): at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.Java:254)
11-13 15:02:52.337: E/AndroidRuntime(8012): at com.abc.xyz.ContinentActivity$LoadQuestions.doInBackground(ContinentActivity.Java:1)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Android.os.AsyncTask$2.call(AsyncTask.Java:287)
11-13 15:02:52.337: E/AndroidRuntime(8012): at Java.util.concurrent.FutureTask.run(FutureTask.Java:234)
私もこの問題に遭遇しました。WiFiを再接続するとこれを解決できます。
私たちにとって、アプリケーションを開始するときに、電話がホストをIPに解決できるかどうかを確認できます。解決できない場合は、WiFiを確認して終了するようユーザーに伝えます。
役に立てば幸いです。
シミュレーター(OSX上のAndroid Studio)でも同じ例外がありましたが、iOSシミュレーターで同じURLに接続するとうまくいきました...個人用ホットスポットに接続しながらシミュレーターを実行するという事実に起因するようです私のインターネット接続のために、Wi-Fiに接続しているときに後で戻ってきたので、シミュレータは何らかの理由で新しいインターネット接続を好まなかったため、古いホットスポットが現在の接続であり、もはや機能していなかったようです。
シミュレーターを閉じて再起動するとうまくいきました!
WiFiの再接続がうまくいかない場合は、デバイスを再起動してください。
これは私のために動作します。それが役に立てば幸い。
私は同じエラーを受け取りました、そして、問題は私がVPNにいて、それを理解しなかったことでした。 VPNから切断してWIFIネットワークに再接続すると、問題は解決しました。
マニフェストファイルでタグを設定できませんでした
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
自宅のWiFiでAndroidアプリを実行していて、シミュレーターを閉じずに別のWiFiで実行しようとすると、このエラーが発生しました。
シミュレータを閉じてアプリを再起動するだけでうまくいきました!
Androidエミュレーターでアプリケーションをテストしていましたが、AndroidエミュレーターデバイスのWi-Fiをオフにしてからオンにすることでこれを解決しました。完璧に機能しました。