2014-03-12 39 views
0

我只是設置我的列表視圖空..但現在從另一個活動添加數據到數據庫後,並試圖顯示列表視圖中的數據,它給予相同的emptyview ..它不是顯示數據,如何在listview中檢索數據.. ??如何從列表視圖中的數據庫充氣數據

Campaign.java

package com.example.smscampaign; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 



public class Campaign_Details extends Activity { 

    private Demo selectedAdapter; 
    private ArrayList<String> list; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_demostration); 
     TextView text1=(TextView) findViewById(R.id.text1); 
     TextView text2=(TextView) findViewById(R.id.text1); 
     DataBaseHandler info= new DataBaseHandler(this); 
     info.open(); 
     String data=info.getData(); 
     info.close(); 
     String[] values= new String[]{ data };  
     //txt.setText(data); 
     // Button next=(Button) findViewById(R.id.next); 
     // Map<String, String[]> storage = new HashMap<String, String[]>(); 
    // String[] tableItems = storage.get("ContactTable"); 


     // next.setOnClickListener(this); 
    // final ListView listview = (ListView) findViewById(R.id.listview); 

     ListView listview = (ListView) findViewById(R.id.listview); 
     ListView listview1 = (ListView) findViewById(R.id.listview1); 

     listview.setEmptyView(findViewById(R.id.empty)); 
     // TextView emptyText = (TextView)findViewById(android.R.id.empty); 
     // listview .setEmptyView(emptyText); 


     final ArrayList<String> list = new ArrayList<String>(); 
     for (int i = 0; i < values.length; ++i) { 
      selectedAdapter = new Demo(this,values); 
      selectedAdapter.setNotifyOnChange(true); 


      listview.setAdapter(selectedAdapter); 
      list.add(values[i]); 
     } 

     listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, final View view, 
       int position, long id) { 
       Intent n = new Intent(getApplicationContext(), SmsSend.class); 
      startActivity(n); 

      } 
     }); 
     } 






    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // TODO Auto-generated method stub 
     getMenuInflater().inflate(R.menu.main2, menu); 
     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 

     switch (item.getItemId()) { 
     case R.id.nextPage: 
      Intent i = new Intent(this,SmsSend.class); 
      startActivity(i); 
      break; 

     } 
     return super.onOptionsItemSelected(item); 
    } 
    } 

demo.java //定義適配器

package com.example.smscampaign; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class Demo extends ArrayAdapter{ 
    private Campaign_Details list1; 
     // used to keep selected position in ListView 
     private int selectedPos = -1; // init value for not-selected 
     private Context context; 
     private String[] values; 

     public Demo(Context context, String[] values) { 
      super(context, R.layout.list); 
      this.context = context; 
      this.values = values; 
     } 



     public void setSelectedPosition(int pos){ 
     selectedPos = pos; 
      // inform the view of this change 
      notifyDataSetChanged(); 
     } 
     public int getSelectedPosition(){ 
      return selectedPos; 
     } 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
         LayoutInflater vi = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         v = vi.inflate(R.layout.list, null); 

       // get text view 
        TextView label = (TextView)v.findViewById(R.id.data); 

        if (convertView == null) {    
         v = vi.inflate(R.layout.list, parent, false); 
        } 
        else 
         v = convertView; 
        TextView text1 = (TextView) v.findViewById(R.id.data); 
        text1.setText(values[position]); 
        return v; 
       } 
     } 

DatabaseHandler.java

package com.example.smscampaign; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 



public class DataBaseHandler{ 

    public static final String KEY_ROWID="_id"; 
    public static final String KEY_NAME="person_name"; 
    public static final String KEY_SCALE="scale_person"; 

    private static final String DATABASE_NAME="Scaledb"; 
    private static final String DATABASE_TABLE="peopleTable"; 
    private static final int DATABASE_VERSION=1; 

    private DbHelper ourHepler; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 
    public class DbHelper extends SQLiteOpenHelper{ 

     public DbHelper(Context context) { 
      super(context,DATABASE_NAME,null,DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + 
        KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
        KEY_NAME + " TEXT NOT NULL, " + 
        KEY_SCALE + " TEXT NOT NULL);" 
        ); 
      } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS" + DATABASE_TABLE); 
      onCreate(db); 
     } 

    } 

    public DataBaseHandler(Context c){ 
     ourContext=c; 
    } 


    public DataBaseHandler open() throws SQLException{ 
     ourHepler = new DbHelper(ourContext); 
     ourDatabase= ourHepler.getWritableDatabase(); 
     return this; 
    } 
    public void close() 
    { 
     ourHepler.close(); 
    } 


    public long entryCreate(String name, String scale) { 
     // TODO Auto-generated method stub 

     ContentValues cv=new ContentValues(); 
     cv.put(KEY_NAME, name); 
     cv.put(KEY_SCALE, scale); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 

    } 


    public String getData() { 
     // TODO Auto-generated method stub 
     String[] col= new String[]{KEY_ROWID,KEY_NAME,KEY_SCALE}; 
     Cursor c= ourDatabase.query(DATABASE_TABLE, col, null, null, null, null, null); 
     String run=""; 
     int iRow=c.getColumnIndex(KEY_ROWID); 
     int iName=c.getColumnIndex(KEY_NAME); 
     int iScale=c.getColumnIndex(KEY_SCALE); 

     for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ 
      run=run+c.getString(iRow)+ " " + c.getString(iName) + " " + c.getString(iScale) + "\n"; 
     } 

     return run; 
    } 


    public String getScale(long l) { 
     // TODO Auto-generated method stub 
     String[] col= new String[]{KEY_ROWID,KEY_NAME,KEY_SCALE}; 
     Cursor c= ourDatabase.query(DATABASE_TABLE, col,KEY_ROWID + "-" + l, null, null, null, null); 

     if(c != null){ 
      c.moveToFirst(); 
      String scale=c.getString(2); 
      return scale; 
     } 
     return null; 
    } 


    public String getName(long l) { 
     // TODO Auto-generated method stub 
     String[] col= new String[]{KEY_ROWID,KEY_NAME,KEY_SCALE}; 
     Cursor c= ourDatabase.query(DATABASE_TABLE, col,KEY_ROWID + "-" + l, null, null, null, null); 

     if(c != null){ 
      c.moveToFirst(); 
      String name=c.getString(1); 
      return name; 

     } 
     return null; 
    } 


    public void updateEntry(long lt, String mName, String mScale) { 
     // TODO Auto-generated method stub 
      ContentValues cvUpdate=new ContentValues(); 
      cvUpdate.put(KEY_NAME,mName); 
      cvUpdate.put(KEY_SCALE,mScale); 
      ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_ROWID + "-" + lt, null); 
    } 


    public void deleteEntry(long ltt) throws SQLException{ 
     // TODO Auto-generated method stub 
     ourDatabase.delete(DATABASE_TABLE, KEY_ROWID + "=" + ltt,null); 

    } 


    public void getWritableDatabase() { 
     // TODO Auto-generated method stub 

    } 


} 

activity_list_demonstration.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Active Campaign" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="#4AE56B" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="240dp" 
     android:orientation="vertical" > 

     <ListView 
      android:id="@+id/listview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/empty" 
      style="@android:style/TextAppearance.Large" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center" 
      android:text="Tab on Icon to start a Campaign" > 
     </TextView> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/text2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Closed Campaign" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="140dp" 
     android:orientation="vertical" > 

     <ListView 
      android:id="@+id/listview1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:id="@+id/empty" 
      style="@android:style/TextAppearance.Large" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center" 
      android:text="No Closed Campaign" > 
     </TextView> 
    </LinearLayout> 

</LinearLayout> 
0123如果你的String []數據不是空

list.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/data" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
    </TextView> 


</LinearLayout> 

回答

1

檢查。

其次你的數據庫返回一個長字符串,而不是字符串數組和

for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ 
     run=run+c.getString(iRow)+ " " + c.getString(iName) + " " + c.getString(iScale) + "\n"; 
    } 

還你只有最後一排或空行

改變它像這樣

將只得到一個行中的ListView
List<String> dataArray = new ArrayList<String>(); 
    for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){ 
      dataArray.add(run+c.getString(iRow)+ " " + c.getString(iName) + " " + c.getString(iScale) + "\n"); 
     } 
    return dataArray; 

設置你的適配器使用List陣列;

公共類查看SampleAdapter延伸BaseAdapter {

private Context context; 
private List<String> dataArray; 

public SampleAdapter(Context context,List<String> dataArray){ 
    this.context = context; 
    this.dataArray = dataArray; 

} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return dataArray.size(); 
} 

@Override 
public Object getItem(int arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int arg0) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

static class ViewHolder 
{ 
    TextView txt1;  
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder; 
    if(convertView==null){ 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.grid_row_item_layout,parent, false); 
     viewHolder = new ViewHolder(); 
     viewHolder.txt1 = (TextView) convertView.findViewById(R.id.textView1); 
     convertView.setTag(viewHolder); 
    } 
    else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.txt1.setText(dataArray.get(position)); 


    return convertView; 
} 

}

MainActivity

public class MainActivity extends Activity { 

SampleAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    List<String> array = new ArrayList<String>(); 
    array.add("data line 1"); 
    array.add("data line 2"); 
    array.add("data line 3"); 
    array.add("data line 4"); 
    array.add("data line 5"); 


    adapter = new SampleAdapter(this,array); 
    ListView listView = (ListView) findViewById(R.id.listView1); 
    listView.setAdapter(adapter); 




} 

}

0

修復這個第一

final ArrayList<String> list = new ArrayList<String>(); 
for (int i = 0; i < values.length; ++i) { 

    list.add(values[i]); 
} 
selectedAdapter = new Demo(this,values); 
listview.setAdapter(selectedAdapter); 

還適配器需要此方法

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return values.length(); 
} 
+0

這是行不通的。 – Himani

+0

什麼不工作,你可以提供更多的信息錯誤/ exeptions –

+0

有沒有錯誤應用程序正在運行,但數據不可見列表中 – Himani

相關問題