Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use custom class in HashMap in android

EDIT: I have posted it earlier for java. But it working in Java but not in android. So I am posting the android code now.

I am trying to use a custom class into a HashMap in my android application. But it is not giving my desired output. Please help.

I want to do something like this...

//Code for android application:

//Point class

class Point{
 private int x;
 private int y;

public Point(){

}
public Point(int _x, int _y){
  this.x = _x;
  this.y = _y;
}

}

DataManager.java

public class DataManager {

    private Vector<Integer> RSSI = null;
    private int numOfRSSI;

    private Map<Vector<Integer>, Point> SingleData = null;
    private Vector<Map<Vector<Integer>, Point>> Data = null;
    private Context context;

    public DataManager(Context _context) {
        this.context = _context;        
        Data = new Vector<Map<Vector<Integer>, Point>>();
    }

    public void loadData(String filename) {
        if (Data == null) {
            System.out.println("***ERROR: DataSet not initalized!!!\n");
        }
        readFile(filename);
    }

    public void printData(){        
        Vector<Integer> rssi = null;
        Map<Vector<Integer>, Point> single = null;
        Point point = null;

        for(int i=0;i<Data.size();i++){
        single = new HashMap<Vector<Integer>, Point>() ;
        single = Data.get(0);

        for (Map.Entry<Vector<Integer>, Point> entry :single.entrySet()) {

              rssi = new Vector<Integer>();           
              point = new Point();            
              rssi = entry.getKey();
              point = entry.getValue();           
              System.out.print("("+point.x+" "+point.y+") ");

              for(int j = 0;j<rssi.size(); j++){
                  System.out.print(rssi.get(j)+" ");
              }           
              System.out.println("");
        }       
        }       
    }

    private void readFile(String filename) {

        InputStream is = null;
        try {
            is = context.getResources().getAssets().open("datasets.txt");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("error file reading");
        }

        if (is != null) {

            StringBuilder text = new StringBuilder();
            int flag = 0;

            try {
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(is));

                String line;

                while ((line = br.readLine()) != null) {

                    if(flag==0){
                        flag=1;
                        this.numOfRSSI = Integer.parseInt(line);
                        System.out.println("number of RSSI: "+numOfRSSI);
                    }
                    else if(flag==1){
                        parseLine(line);
                    }

                }

            } catch (IOException e) {
                // Error reading file
            }

            finally {
                // myHelper.print(text.toString());

            }
        }

    }

    private void parseLine(String line) {

        RSSI = new Vector<Integer>();
        SingleData = new HashMap<Vector<Integer>, Point>();


        StringTokenizer st = new StringTokenizer(line, ",");
        int co = 0;
        int x=0,y=0;
        while (st.hasMoreTokens()) {

            if(co < this.numOfRSSI){
                RSSI.add(Integer.parseInt(st.nextToken()));
                co++;
            }
            else{
                x = Integer.parseInt(st.nextToken());
                y = Integer.parseInt(st.nextToken());
            }

        }

        Point point = new Point(x,y);

        SingleData.put(RSSI, point);

        Data.add(SingleData);
    }

}

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        DataManager dataManager = new DataManager(MainActivity.this);

        dataManager.loadData("datasets.txt");

        dataManager.printData();
    }

}

datasets.txt

5 -61,-51,-46,-41,-28,1,0

-60,-50,-51,-47,-34,2,0

-72,-52,-53,-55,-37,3,0

-60,-44,-58,-53,-40,3,1

-68,-55,-46,-47,-45,2,1

-66,-60,-48,-43,-37,1,1

-62,-57,-49,-45,-34,0,2

Output is showing.....

1 0 -61 -51 -46 -41-28

1 0 -60 -50 -51 -47 -34

1 0 -72 -52 -53 -55 -37

etc.....

But it should be...

1 0 -61 -51 -46 -41-28

2 0 -60 -50 -51 -47 -34

etc...

So this is my problem.

like image 669
Md. Tahmid Mozaffar Avatar asked Mar 16 '26 12:03

Md. Tahmid Mozaffar


1 Answers

Below is working fine on my machine :-

import java.util.Map;
import java.util.Vector;

public class Demo {

    public static void main(String[] args) {
        Map<Vector<Integer>, Point> vectorPointMap = new HashMap<Vector<Integer>, Point>();

        Vector<Integer> vector1 = new Vector<Integer>();
        vector1.add(1);
        vector1.add(2);
        vector1.add(3);

        vectorPointMap.put(vector1, new Point(10, 10));

        Vector<Integer> vector2 = new Vector<Integer>();
        vector2.add(4);
        vector2.add(5);
        vector2.add(6);

        vectorPointMap.put(vector2, new Point(20, 20));

        // Print data
        for (Map.Entry<Vector<Integer>, Point> entry : vectorPointMap.entrySet()) {


            Vector<Integer> keyVector = entry.getKey();
            Point valuePoint = entry.getValue();

            System.out.print("(" + valuePoint.x + " " + valuePoint.y + ") ");

            for (int j = 0; j < keyVector.size(); j++) {
                System.out.print(keyVector.get(j) + " ");
            }

            System.out.println("");
        }
    }
}
like image 78
mogli Avatar answered Mar 18 '26 02:03

mogli



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!