サーバーからJSON文字列をダウンロードするプログラムがあります。私が電話をかけようとする最近まで、物事はうまくいっていました
jsonReader.execute(getUrl).get();
ここで、jsonReaderはJSON文字列をダウンロードするためのAsyncTaskであり、getUrlは実行するためのURLです。このメソッドは実行されません。奇妙なことに、私の電話では機能します。
これが私のコードです
json文字列リーダーを呼び出すメソッド
private PointOfInterest getPointWithID(int id) {
String getUrl;
JSONReader jsonReader = new JSONReader();
try {
Log.d(TAG,"Trying to get ID: " + id);
getUrl = url + String.valueOf(id);
Log.d(TAG,"Trying to get json from: " + id); <-- Last Log line to get printed when run on emulator
jsonReader.execute(getUrl).get();
} catch (Exception e) {
e.printStackTrace();
}
String jsonString = jsonReader.returnJSONString();
Log.d(TAG,"Downloaded: " + jsonString);
//System.out.println("JSON: " + jsonString);
JSONResponse jsonResponse = JSONResponse.convertJSONToResponse(jsonString);
//System.out.println("JSON RESPONSE " + jsonResponse);
return jsonResponse.getPointofInterest();
}
jsonReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
/**
* Read JSON Strings
* @author Tom
*
*/
public class JSONReader extends AsyncTask <String, Void, String> {
String result;
DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
StringBuilder sb = new StringBuilder();
String TAG = "JSONReader";
// constructor
public JSONReader() {
result = "";
}
@Override
protected String doInBackground(String... url) {
Log.d(TAG, "Executing " + url); <--Does not get printed when run on emulator
HttpPost httppost = new HttpPost(url[0]);
// Depends on your web service
httppost.setHeader("Content-type", "application/json");
try {
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
// json is UTF-8 by default i believe
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
}catch(Exception e){
e.printStackTrace();
}
return result = sb.toString();
}
public String returnJSONString(){
return result;
}
}
adbを再起動して、新しいAVDを作成しようとしましたが、何も機能しないようです。電話でテストするしかありませんが、API 17用に開発しているため、これは望ましくありません。ご協力いただきありがとうございます。