2012-03-28 170 views
0

我有以下代碼的Android聊天應用程序的ListView不工作

package cyclist.project; 

import java.util.ArrayList; 
import java.util.List; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.json.JSONTokener; 

import cyclist.Utility.AppLog; 
import cyclist.Utility.common; 
import cyclist.Utility.webService; 
import cyclist.bean.discussion_item; 
import cyclist.dal.Attributes; 
import cyclist.dal.DBHelper; 
import cyclist.dal.DBService; 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class user_discussion extends Activity{ 

    ListView events; 
    ArrayList<discussion_item> list; 
    static EditText et; 
    Button btn; 

    webService webService; 
    cyclist.Utility.common common; 
    DBService dbService; 
    DBHelper dbHelper; 
    Attributes attributes; 

    public void onCreate(Bundle savedInstanceState) { 

     webService = new cyclist.Utility.webService(this); 
     common = new common(); 
     dbHelper = new DBHelper(this); 
     dbService = new DBService(dbHelper); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.user_discussion); 
     events = (ListView) findViewById(R.id.lv_user_discussion_list); 
     et = (EditText) findViewById(R.id.lv_list_events_listT); 
     btn = (Button) findViewById(R.id.lv_list_events_list); 
     list = new ArrayList<discussion_item>(); 

     showTime(); 
     setList(); 

     events.setAdapter(new ListAdapter(user_discussion.this, list)); 
     // new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list) 
    } 

    public void register(View view) { 
     Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER"); 
     intent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); 
     intent.putExtra("sender", "[email protected]"); 
     startService(intent); 
     et.setText(""); 
    } 

    public void showTime() { 
//  ListAdapter la = new ListAdapter(user_discussion.this, list); 
//  la.notifyDataSetChanged(); 
//  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
//  String string = prefs.getString(AUTH, "n/a"); 
//  Toast.makeText(this, string, Toast.LENGTH_LONG).show(); 
//  Log.d("C2DM RegId", string); 

    btn.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0) { 
      String url = common.setChatInUrl(et.getText().toString()); 
      AppLog.logString("url= "+ url); 
      String response = webService.getWebResponse(url);    
      setList(); 
      et.setText(""); 
      // register(btn); 
      } 
     }); 
    } 

    private void setList(){ 
     JSONObject json; 
     try { 
      json = new JSONObject(JSON.getJSONfromURL("http://myservices/ws_cyc/events_service.php?action=get_chats")); 
      JSONArray miles = json.getJSONArray("cyc"); 
      JSONObject rec; 
      JSONObject rec2 = null; 
      discussion_item item = null; 

       for (int i=0; i<miles.length(); i++){ 
        rec = miles.getJSONObject(i); 
        rec2 = rec.getJSONObject("cycObject"); 
        item = new discussion_item(rec2.getString("Chats").toString()); 
        list.add(item); 
       }         
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
    } 

    @SuppressWarnings("unused") 
    private class ListAdapter extends ArrayAdapter<discussion_item> { 

     private LayoutInflater inflater; 

     public ListAdapter(Context context, List<discussion_item> list) { 
      super(context, R.layout.user_discussion_left_item, R.id.txt_event_item_title, list); 
      inflater = LayoutInflater.from(context);  // Cache the LayoutInflate to avoid asking for a new one each time. 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      ViewHolder holder; 
//   TextView textView;   
      discussion_item event = (discussion_item) this.getItem(position); 
      AppLog.logString(String.valueOf(position)); 
      holder = new ViewHolder(); 

      if (convertView == null) { 
       if(position%2 == 0){ 
        convertView = inflater.inflate(R.layout.user_discussion_left_item, null); 
        holder.textView = (TextView) convertView.findViewById(R.id.txt_event_item_title); 
        holder.textView.setText(event.getTitle()); 
       } 
       else{ 
        convertView = inflater.inflate(R.layout.user_discussion_right_item, null); 
        holder.textView = (TextView) convertView.findViewById(R.id.txt_event_item_title); 
        holder.textView.setText(event.getTitle()); 
       }     
      } 
      return convertView;   
     } 
     } 

    public void NavigateToResult(Context context, Class<?> targetClass) { 
      Intent intent = new Intent(context, targetClass); 
      startActivity(intent); 
      finish(); 
     } 
     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) 
     { 

      if (keyCode == KeyEvent.KEYCODE_BACK) 
      { 
       NavigateToResult(this, login.class); 
        return false;   
      } 
      else 
       return super.onKeyDown(keyCode, event); 


     } 
     static class ViewHolder 
     { 
      public TextView textView; 
      //ImageView imgIcon; 
     } 
} 

我使用PHP JSON Web服務來檢索聊天室的列表。問題是我的自定義列表不能正確顯示,即它只顯示4行聊天

0 - 你好 1 - 你好 2 - 怎麼ru? 3 - 很好。

剩餘部分不顯示即

4 - 什麼 - [R烏爾今天的計劃 5 - 什麼 6 ......等等......

,而不是顯示4起,它正在重複這些0-3指數聊天。 請任何幫助。我在哪裏犯錯? 當我通過在網絡瀏覽器中運行我的Web服務來調試時,它將返回完整的聊天列表。

+1

這個網站是詢問有關具體問題的具體問題。你在問其他人爲你做你的工作。得分爲1分,沒有被接受的答案,並且沒有表明你認爲問題是什麼,大多數人都不會花時間來幫助你。 – 2012-03-28 20:04:49

回答

0

@ Ollie C Thanx指出的事實..但是另一個用戶@ code.google.com幫助我解決了我的查詢..我問的唯一的事情是我是否犯了錯誤或不。是模糊的,但天才告訴我,我應該重新檢查我的ListAdapter類

事實證明,我是在getView()方法犯錯誤。

再次感謝您的建議。

0

如果您創建JSONObject rec,您需要獲取每個對象evry的循環開始時間 ;外循環就會出現此問題

用途:

for(int i=0; i<miles.length(); i++){ 
       JSONObject rec = miles.getJSONObject(i); 
       JSONObject rec2 = rec.getJSONObject("cycObject"); 
       item = new discussion_item(rec2.getString("Chats").toString()); 
       list.add(item); 

      }