onCreate()の外部でAsyncTaskを拡張するクラスを作成します。(このシナリオだけでなく) 常にメソッドの外側にクラスを作成する必要があります (匿名の内部クラスのようないくつかのケースを除いて、もちろんそれはまた別の大きな議論です)。次に、AsyncTask クラスのオブジェクトを onCreate() メソッドで作成し、そのオブジェクトを使用してメソッドを呼び出して、そのタスクを別のスレッドで実行します。あなたのコードによると、物事を区別することはできません。doInBackground()では、別のスレッドで実行する必要があるデータを取得するコードを記述し、onPostExecute()メソッドでは、doInBackground から取得したデータを取得して UI を更新します。UI を更新するには、runOnUIThread()を使用できます。execute()
以下に示すように..以下は、要件に応じた疑似コード(テストされていない)です..
public class AllEventActivity extends Activity {
private ListView listView1;
private String tag = "all";
private JSONArray json;
View header;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<AllEvent> weather_data = new ArrayList<AllEvent>();
// AllEvent weather_data[] = new AllEvent[]
// {
// new AllEvent(R.drawable.a, "Soccer Field"),
// };
weather_data.add(new AllEvent(R.drawable.a, "a", "b", "c", "d", "e"));
listView1 = (ListView)findViewById(R.id.listView1); //
header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
new All_Events_DB_Connect().execute(new String[] {"all"});
}
class All_Events_DB_Connect extends AsyncTask<String, Void, JSONArray>
{
@Override
protected JSONArray doInBackground(String... arg0)
{
String tag = arg0[0];
UserFunctions u = new UserFunctions();
//JSONObject json = new JSONObject();
JSONArray json = new JSONArray();
try
{
json = u.getAllEvents(tag);
}
catch(Exception e)
{
Log.e("Error", e.getMessage());
}
return json;
}
@Override
protected void onPostExecute(JSONArray arr)
{
//returnedJson = json;
json = arr;
runOnUiThread(new Runnable() {
public void run() {
JSONObject j = new JSONObject();
for (int i = 0; i < json.length(); i++)
{
try
{
j = json.getJSONObject(i);
Toast.makeText(this, j.getString("hostName"), Toast.LENGTH_LONG).show();
}
catch (Exception e)
{
Log.e("JSON Error", e.getMessage());
}
}
AllEventAdapter adapter = new AllEventAdapter(this,
R.layout.listview_item_row, weather_data);
listView1.addHeaderView(header);
listView1.setAdapter(adapter);
}
});
}
}
}