0
votes

I create an application in which,I'm retrieving the data from sqllite database,but that data is not coming properly whole of the data is coming in single TextView and onClick() whole of the data is selected.I mean, I only want to select the particular data so as to open in new activity to update it,but whole data is getting selected.it is not in a proper format.what to do, to get the proper data

Campaign_Details.java

package com.example.smscampaign;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Semaphore;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Campaign_Details extends Activity {

 ListView listview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_demostration);
         listview = (ListView) findViewById(R.id.listview);
         listview.setTextFilterEnabled(true);
        TextView txt= (TextView) findViewById(R.id.textnum1);
        DataBaseHelp info = new DataBaseHelp(this);
        info.open();
        String data = info.getData();
    //  String r[] = {info.KEY_NAME , info.KEY_SCALE};
        info.close();
        String [] values1= data.split("\n");
        int t = values1.length;
        txt.setText(Integer.toString(t));

        String[] values = new String[] { data };

        final ArrayList<String> list = new ArrayList<String>();
        for (int i = 0; i < values.length; ++i) {
            list.add(values[i]);
        }
        final StableArrayAdapter adapter = new StableArrayAdapter(this,
                android.R.layout.simple_list_item_1, list);
        listview.setAdapter(adapter);

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, final View view,
                    int position, long id) {

            }

        });
    }

    private class StableArrayAdapter extends ArrayAdapter<String> {

        HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

        public StableArrayAdapter(Context context, int textViewResourceId,
                List<String> objects) {
            super(context, textViewResourceId, objects);
            for (int i = 0; i < objects.size(); ++i) {
                mIdMap.put(objects.get(i), i);
            }
        }

        @Override
        public long getItemId(int position) {
            String item = getItem(position);
            return mIdMap.get(item);
        }

    }

    @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(Campaign_Details.this,SmsSend.class);
            startActivity(i);
            break;

        }
        return true;
    }
}  

activity_list_demostration.xml

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

    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:stretchColumns="3" >

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textcolour"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:background="@drawable/green_circle" />

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

            <TextView
                android:id="@+id/textnum1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginRight="130dp"
                android:background="@drawable/green_badge"
                android:gravity="center"
                android:text=" 0 "
                android:textColor="@color/white" />
        </TableRow>
    </TableLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="240dp"
        android:orientation="vertical" >
 <TextView
            android:id="@+id/data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/black"
            >
        </TextView>
        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <ListView
                android:id="@+id/listview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/black" />
        </ScrollView>
    </LinearLayout>

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:stretchColumns="3" >

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/textcolour"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:background="@drawable/grey_circle" />

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

            <TextView
                android:id="@+id/textnum2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginRight="130dp"
                android:background="@drawable/grey_badge"
                android:gravity="center"
                android:text=" 0 "
                android:textColor="@color/white" />
        </TableRow>
    </TableLayout>

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

        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <ListView
                android:id="@+id/listview1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/black" />
        </ScrollView>
    </LinearLayout>

</LinearLayout>

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.TextView;

public class Demo extends ArrayAdapter<String>{

private final String[] values;
private final Context context;
    public Demo(Context context, String[] values) {
        super(context,R.layout.list, values);
        this.context=context;
        this.values= values;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowview= inflater.inflate(R.layout.list, parent,false);
        TextView txt=(TextView) rowview.findViewById (R.id.text1);
        //ImageView img=(ImageView) rowview.findViewById (R.id.icon);
        txt.setText(values[position]);
        //changing icon

        return rowview;
    }
}

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/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

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";
    public static final String KEY_Contacts="Contacts_person";

    private static final String DATABASE_NAME="Himani";
    private static final String DATABASE_TABLE="savedTable";
    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 ,"  + KEY_Contacts + ")"
                    );
            }

        @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 , String contacts) {
        // TODO Auto-generated method stub

        ContentValues cv=new ContentValues();
        cv.put(KEY_NAME, name);
        cv.put(KEY_SCALE, scale);
        cv.put(KEY_Contacts, contacts);
        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, KEY_Contacts};
        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);
        int iMessage=c.getColumnIndex(KEY_Contacts);
        for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
            run=run+c.getString(iRow)+ " " + c.getString(iName) + " " + c.getString(iScale) + " " + c.getString(iName) +"\n";
        }

        return run;
    }


    public String getScale(long l) {
        // TODO Auto-generated method stub
        String[] col= new String[]{KEY_ROWID,KEY_NAME,KEY_SCALE , KEY_Contacts};
        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 , KEY_Contacts};
        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 String getC0ntacts(long l)  {
        // TODO Auto-generated method stub
        String[] col= new String[]{KEY_ROWID,KEY_NAME,KEY_SCALE ,KEY_Contacts};
        Cursor c= ourDatabase.query(DATABASE_TABLE, col,KEY_ROWID + "-" + l, null, null, null, null);

        if(c != null){
            c.moveToFirst();
            String contacts=c.getString(3);
            return contacts;

        }
        return null;
    }

    public  void updateEntry(long lt, String mName, String mScale ,String mContatcs) {
        // TODO Auto-generated method stub
          ContentValues cvUpdate=new ContentValues();   
          cvUpdate.put(KEY_NAME,mName);
          cvUpdate.put(KEY_SCALE,mScale);
          cvUpdate.put(KEY_Contacts,mContatcs );
          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);

    }
}

Actually the problem is data is retrieving in only single textbox..,different data with different rowid is not displaying in the different textbox in listview..,what should i do to separate the data by row id

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

giving the list at last in the adapter as a result whole of the data is viewing in single text box

2
Why do you have listview inside scrollview. is it needed that way. ListView itself sufficient for scrolling - BlackBeard

2 Answers

2
votes

You have error in your create table syntax,

KEY_Contacts 

You forgot to define data type for above column.

Your correct syntax should be like follow,

 @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 ,"  + 
          KEY_Contacts + "TEXT NOT NULL )"                  // Change at this line.
       );
 }

Note : After this change, you need to delete your old application from emulator/real device and then start installing a fresh will give you proper result.

1
votes

In getData method your are concatenating all the data, modify it like this

public ArrayList<String> getData() {

    String[] col= new String[]{KEY_ROWID,KEY_NAME,KEY_SCALE, KEY_Contacts};
    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);
    int iMessage=c.getColumnIndex(KEY_Contacts);
    ArrayList<String> newList= new ArrayList<String>();
    for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
     newList.add(c.getString(iRow)+ " " + c.getString(iName) + " " + c.getString(iScale) + " " + c.getString(iName));
    }

    return newList;
}

And in your activity

final StableArrayAdapter adapter = new StableArrayAdapter(this,
            android.R.layout.simple_list_item_1, info.getData());
listview.setAdapter(adapter);

Change your array adapter constructor to accept ArrayList as argument like this

public class Demo extends ArrayAdapter<String>{

private final ArrayList<String> values=null;
private final Context context;
public Demo(Context context, ArrayList<String> values) {
    super(context,R.layout.list, values);
    this.context=context;
    this.values= values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowview= inflater.inflate(R.layout.list, parent,false);
    TextView txt=(TextView) rowview.findViewById (R.id.text1);
    //ImageView img=(ImageView) rowview.findViewById (R.id.icon);
    txt.setText(values.get(position));
    //changing icon

    return rowview;
}

}