我正在访问http://graph.facebook.com/xyz,并在ListView
中显示姓名,身份和性别。我不知道如何从doInBackground
和BaseAdapter调用结果。
public class FbMainActivity extends Activity {
Button b;
ListView lv;
DefaultHttpClient client;
HttpGet get;
HttpResponse response;
HttpEntity entity;
ArrayList<FBAccount> al;
MyAdapter adapter;
TextView tv1, tv2, tv3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fb_main);
b = (Button) findViewById(R.id.bFAce);
tv1 = (TextView) findViewById(R.id.textView1);
tv2 = (TextView) findViewById(R.id.textView2);
tv3 = (TextView) findViewById(R.id.textView3);
lv = (ListView) findViewById(R.id.list);
al = new ArrayList<FBAccount>();
adapter = new MyAdapter();
lv.setAdapter(adapter);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyOperation operation = new MyOperation();
operation.execute();
}
});
}
private class MyOperation extends AsyncTask<String, Void, String> {
ProgressDialog dialog = new ProgressDialog(FbMainActivity.this);
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog.setMessage("Loading....");
dialog.show();
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
client = new DefaultHttpClient();
get = new HttpGet("http://graph.facebook.com/somename");
try {
response = client.execute(get);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
entity = response.getEntity();
InputStream is = null;
try {
is = entity.getContent();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
StringBuffer buffer = new StringBuffer();
String line = null;
do {
try {
line = reader.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
buffer.append(line);
} while (line != null);
String str = buffer.toString();
FBAccount account;
JSONObject object;
try {
object = new JSONObject(str);
String id = object.getString("id");
String name = object.getString("name");
String gender = object.getString("gender");
account = new FBAccount();
account.setId(id);
account.setName(name);
account.setGender(gender);
al.add(account);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
adapter.notifyDataSetChanged();
return str;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
}
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return al.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return al.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LinearLayout layout = (LinearLayout) getLayoutInflater().inflate(
R.layout.cust_layout, null);
String id = al.get(position).getId();
String name = al.get(position).getName();
String gender = al.get(position).getGender();
tv1.setText(id);
tv2.setText(name);
tv3.setText(gender);
return layout;
}
}
}
最佳答案
您需要在getView()方法中初始化textviews ...
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.row_student_sms, parent, false);
YourModelClass model = al.get(position);
final TextView tv1 = (TextView) rowView.findViewById(R.id.textView1);
tv1.setText(model.getId());
TextView tv2 = (TextView) rowView.findViewById(R.id.textView2);
tv2.setText(model.getName());
TextView tv3 = (TextView) rowView.findViewById(R.id.textView3);
tv2.setText(model.getGender());
return rowView;
}
关于android - 使用异步任务和BaseAdapter进行Json解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15563299/