私は進行状況ダイアログを適切に実装する方法を学ぼうとしているアンドロイドの初心者です。OnCreate中にリストビューにデータを入力する前に、Twitterの結果をクエリして解析するコードから始めました。これは完璧に機能しました。数秒かかるのでプログレスバーを追加したかったのですが、プログレスバーを追加してからコードが機能しなくなりました。解析中にnullpointerエラーが発生し、「ビュー階層を作成した元のスレッドのみがビューにアクセスできます」というエラーが原因でアプリがクラッシュします。これを解決するためのヘルプをいただければ幸いです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dialog = new ProgressDialog (MainActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMessage("Loading... please wait");
dialog.setIndeterminate(false);
dialog.setMax(100);
dialog.setProgress(0);
dialog.show();
Runnable runnable = new Runnable() {
@Override
public void run() {
tweets = new ArrayList<Tweet>();
try {
JSONObject jArray = JSONfunctions.getJSONfromURL("http://search.twitter.com/search.json?q=gold%20silver%20news&rpp=15");
JSONArray parsedTwitter = jArray.getJSONArray("results");
if(parsedTwitter.equals("") ){
Toast.makeText(MainActivity.this, "No nearby locations", Toast.LENGTH_LONG).show();
}else{
for (int i = 0; i < parsedTwitter.length(); i++) {
JSONObject parsedspecific = parsedTwitter.getJSONObject(i);
if (i == 0){
String from_user = parsedspecific.getString("from_user");
String text = parsedspecific.getString("text");
String profile_image_url = parsedspecific.getString("profile_image_url");
Tweet tweet0 = new Tweet(from_user, text, profile_image_url );
tweets.add(tweet0);
}
dialog.setProgress(50);
if (i == 1){
String from_user = parsedspecific.getString("from_user");
String text = parsedspecific.getString("text");
String profile_image_url = parsedspecific.getString("profile_image_url");
Tweet tweet1 = new Tweet(from_user, text, profile_image_url );
tweets.add(tweet1);
}
}
}
} catch (Exception e) {
Log.e("log_tag", "Error parsing data "+ e.toString());
}
ListView listView = (ListView) findViewById(R.id.ListViewId);
listView.setAdapter(new UserItemAdapter(MainActivity.this, R.layout.listitem, tweets));
dialog.setProgress(100);
dialog.dismiss();
}
};
new Thread(runnable).start();
}