JsonObj クラスのインスタンスを呼び出す MainActivity クラスがあります。JsonObj は AsynchTask を拡張します。以下に貼り付けます。
public class JsonObj extends AsyncTask<String, Void, JSONObject>{
int tid;
String term;
@Override
protected JSONObject doInBackground(String... url) {
// TODO Auto-generated method stub
DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
HttpPost httppost = new HttpPost(url[0]);
JSONObject jsonObject = null;
// Depends on your web service
httppost.setHeader("Content-type", "application/json");
InputStream inputStream = null;
String result = null;
try {
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
// json is UTF-8 by default
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + "\n");
}
result = sb.toString();
// Log.e("JSON-Test [RESULT]: ", result);
jsonObject = new JSONObject(result);
} catch (Exception e) {
Log.e("JSON-Test [exception]: ", e.toString());
}
finally {
try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
}
return jsonObject;
}
@Override
protected void onPostExecute(JSONObject result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
私が達成しようとしているのは、サーバーから JSON を取得して返す任意のアクティビティから呼び出すことができる AsyncTask クラスです。
私の問題は、AsyncTask クラスが JSON を正常にフェッチすることですが、アクティビティに戻すのに苦労しています。
AsyncTask の完了時に OnPostExecute 関数がデータを返すことはわかっていますが、Activity クラスのデータにアクセスしようとしてもうまくいきません。
new JsonObj().execute("http://myserver/json");
JsonObj クラスを呼び出すために使用しています。
OnpostExecute を呼び出して、AsynchTask がサーバーから取得したデータに直接アクセスするにはどうすればよいですか、またはこの問題のより良い解決策は何ですか?