アプリケーションの一部に問題があります。あるケースでは、json ストリームで http リクエストを使用してデータを取得しましたが、非常にうまく機能しました。しかし、別のケースでは、ユーザーの場所を使用してデータを取得する必要があります。ロケーションプロバイダーを使用した後、http リクエストが正しく機能しませんでした。この問題は、アプリケーションをテストする必要がある 2 つのデバイスのうちの 1 つにのみ発生します。最初のもの、Android 2.3.6を搭載したスマートフォンでは、問題ありません。しかし、それは問題が発生する2番目のデバイスにあります。Android 4.0.4のギャラクシータブです(最近アップデートしましたが、以前は3.0.1でしたが、問題は同じでした)。私のアプリケーションはsdk 10(Android 2.3.3)でコンパイルされています
バグが発生したときにスローされる例外をキャッチしようとしますが、例外のメッセージは null で、何が問題なのかわかりません。アニボディはまだこの種のバグに遭遇していますか?
アクティビティのソース コードは次のとおりです。ボタンをクリックすると、実行可能な doRechercheGeoloc が起動されます。
private Runnable doRechercheGeoloc = new Runnable(){
public void run() {
// TODO Auto-generated method stub
getProvider = true;
LocationListener locationListener = new LocationListener(){
public void onLocationChanged(Location newLocation) {
// TODO Auto-generated method stub
Log.i("*", "GPS : location changed");
location = newLocation;
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
Log.i("*", "GPS : provider disabled");
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
Log.i("*", "GPS : provider enable");
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
Log.i("*", "GPS : status changed");
}
};
lm = (LocationManager) getSystemService( AnnuaireActivity.LOCATION_SERVICE );
Log.i("*", "le GPS est activé");
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.removeUpdates(locationListener);
lm = null;
getProvider = true;
lm = null;
handler.postAtFrontOfQueue(doRecherchePourGeoloc);
}
};
そして、http接続を行うjsonパーサーのコード:
public class JsonParser {
...
private String getJson(String url) throws Exception{
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet( url );
try{
//this is this instruction that provoque the error
HttpResponse response = client.execute( get );
StatusLine statusline = response.getStatusLine();
int statuscode = statusline.getStatusCode();
if (statuscode == 200){
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader( new InputStreamReader(content) );
String line;
while((line = reader.readLine()) != null){
builder.append(line);
}
}else{
Log.e("*", JsonParser.class.toString() + " : Failed to download file");
throw new Exception(JsonParser.class.toString() + " : Failed to download file");
}
}catch( ClientProtocolException e ){
Log.e("*", "JsonParser.getJson() : ClientProtocolException : " + e.getMessage());
throw e;//
}catch( IOException ioe ){
Log.e("*", "JsonParser.getJson() : IOException : " + ioe.getMessage());
throw ioe;//
}catch( Exception e ){
Log.e("*", "JsonParser.getJson() : Exception : " + e.getMessage());//the erreur is throwing from here and the message is null
throw e;
}
return builder.toString();
}
...
}
どうも。