[英]Listview not responding after clicking
我已經在doInBackground中完成了來自URl的JSON解析,並將結果顯示在Listview中。 問題是,如果我單擊列表項,那么它將顯示有關列表項的詳細信息。 我已經完成了LinkedIn集成。 從那我得到了列表中顯示的連接列表。 因此,在單擊每個連接項目后,它將顯示有關連接的詳細信息,例如名字,姓氏,標題,pictureurl等。那我該怎么做。
碼:
userProfile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new GetContacts().execute();
}
class GetContacts extends AsyncTask<Void, Void, Void> {
String firstname;
String id;
String headline;
String lastname;
String pictureUrl;
String url;
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(LinkedInSampleActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
DefaultHttpClient httpclient = new DefaultHttpClient();
try{
HttpGet httpget = new HttpGet(
"url");
HttpResponse response = httpclient.execute(httpget);
String jsonResp = EntityUtils.toString(response.getEntity());
Log.d("HTTP","Rsponse : "+ jsonResp);
if (jsonResp!= null) {
JSONObject jsonObject1=new JSONObject(jsonResp);
JSONArray jsonArray = jsonObject1.getJSONArray("values");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
String firstname = jsonObject2.getString("firstName");
String lastname = jsonObject2.getString("lastName");
String headline = jsonObject2.getString("headline");
String pictureUrl = jsonObject2.getString("pictureUrl");
String id = jsonObject2.getString("id");
JSONObject jsonObject3 = jsonObject2.getJSONObject("siteStandardProfileRequest");
String url = jsonObject3.getString("url");
Log.d("HTTP", "firstname : " + firstname + "\n" + "lastName :"
+ lastname + "\n" + "headline : " + headline + "\n"
+ "pictureUrl :" + pictureUrl + "\n" + "id :"
+ id + "\n" + "Url :" + url);
HashMap<String, String> contact = new HashMap<String, String>();
contact.put(TAG_ID, id);
contact.put(TAG_FNAME, firstname);
contact.put(TAG_LNAME, lastname);
contact.put(TAG_HLINE, headline);
contact.put(TAG_PURL, pictureUrl);
contact.put(TAG_URL, url);
contactList.add(contact);
}
}else {
Log.e("HTTP", "Couldn't get any data from the url");
}
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(
LinkedInSampleActivity.this, contactList,
R.layout.list_item, new String[] {TAG_FNAME}, new int[] {R.id.textView1 });
setListAdapter(adapter);
lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent i = new Intent(getApplicationContext(), SingleListItem.class);
i.putExtra("id", id);
i.putExtra("firstname", firstname);
i.putExtra("lastname", lastname);
i.putExtra("headline", headline);
i.putExtra("pictureUrl", pictureUrl);
i.putExtra("url", url);
startActivity(i);
}
});
} }
});
}
在SingleListItem.java類中,我這樣寫:
public class SingleListItem extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.single_list_item);
TextView tv = (TextView)findViewById(R.id.fname);
Intent i = this.getIntent();
if(i!=null){
String id = i.getStringExtra("id");
String firstname = i.getStringExtra("firstname");
String lastname = i.getStringExtra("lastname");
String headline = i.getStringExtra("headline");
String pictureUrl = i.getStringExtra("pictureUrl");
String url = i.getStringExtra("url");
Log.v("LV","id :"+id+"\n"+"firstname :"+firstname+"\n"+"lastname :"+lastname+"\n"+"headline :"+headline+"\n"+"pictureUrl :"+pictureUrl);
//tv.setText("id :"+id+"\n"+"firstname :"+firstname+"\n"+"lastname :"+lastname+"\n"+"headline :"+headline+"\n"+"pictureUrl :"+pictureUrl);
}else{
Toast.makeText(getApplicationContext(), "Intent no get", Toast.LENGTH_SHORT).show();
}
}
}
編譯后,我得到文本的空值。
08-01 06:04:29.330: V/LV(1759): id :null
08-01 06:04:29.330: V/LV(1759): firstname :null
08-01 06:04:29.330: V/LV(1759): lastname :null
08-01 06:04:29.330: V/LV(1759): headline :null
08-01 06:04:29.330: V/LV(1759): pictureUrl :null
您的startActivity(i);
在哪里startActivity(i);
。 將其放在onClick()中
在onItemClick(... startActivity(intent)
中,缺少startActivity(intent)
Intent i = new Intent(getApplicationContext(), SingleListItem.class);
i.putExtra("id", id);
i.putExtra("firstname", firstname);
i.putExtra("lastname", lastname);
i.putExtra("headline", headline);
i.putExtra("pictureUrl", pictureUrl);
i.putExtra("url", url);
startActivity(i);
不要忘記在manifest
聲明SingleListItem
。
編輯:1因為您必須根據位置從string array's HashMap
獲取這些值,所以請嘗試調試onItemClick(...)
。
我認為您必須在oncreate()方法中調用listview的單擊偵聽器事件,而不是在AsyncTask的后執行中調用,因此請嘗試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.