私は最近、ウェブサーバーからの取得、解釈、表示に関するチュートリアルに従っていますが、いくつかの問題に遭遇しました。どんなに頑張っても、ArrayAdapter にtwitterFeed変数を設定できないようです。昨日、クラスfetchTwitterPublicTimelineを別のスレッドで実行するように言われました。それを実行しましたが、ArrayAdapter に値を設定できません。setListAdapterのtwitterFeed変数にカーソルを合わせると表示されるエラー「twitterFeed を解決できません」というエラーが表示され、クラスが実行されていないか、変数が適切に渡されていない可能性があると思われます。私のコードは以下のとおりです。 !
MainActivity.java:
package com.example.simplebrowser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ArrayAdapter;
public class MainActivity extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Handler handler = new Handler() {
public void run() {
ArrayList<String> twitterFeed = fetchTwitterPublicTimeline();
}
};
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, twitterFeed));
}
public ArrayList<String> fetchTwitterPublicTimeline() {
ArrayList<String> listItems = new ArrayList<String>();
try {
URL twitter = new URL("http://twitter.com/statuses/public_timeline.json");
URLConnection tc = twitter.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(tc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
JSONArray ja = new JSONArray(line);
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = (JSONObject) ja.get(i);
listItems.add(jo.getString("text"));
}
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listItems;
}
}
編集:それは間違いだったので、ハンドラーのコメントを外しました。問題はまだ解決されていません。