2015-11-19 4 views
2

У меня есть эта проблема, которую я не могу решить в течение длительного времени. У меня есть данные, записанные в файле csv. Я хочу записать этот элемент в массив String, чтобы использовать их в следующих классах, но каждый элемент в массиве равен последнему, и я не знаю, что я делаю неправильно, и мне нужна помощь в этом.Получение последнего элемента из массива как каждый

В этом классе я читаю файл saved.csv и записываю его в массив String, а затем я проверяю это письмо, записывая эти элементы обратно в новый файл csv-check, но вместо того, чтобы получать разные значения в каждая строка у меня такая же, как и в последней.

public class MainActivity extends AppCompatActivity { 

Button button; 
Button button2; 
Button button3; 
DescriptorMatcher matcher; 
static String name2; 
static String color2; 
String x2; 
String y2; 
float xsec; 
float ysec; 
Mat desc2; 
static String descriptor2; 
InputStream fis = null; 
String line; 
String path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Objects"; 
File file = new File(path+"/saved.csv"); 
File file2 = new File(path+"/check.csv"); 
int numer = 0; 
public static String[] dataToSave = null; 
public static ObjectRep[] objectTab = new ObjectRep[25]; 


static { 
    if (!OpenCVLoader.initDebug()) { 
     // Handle initialization error 
    } 
} 
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) 
{ 
    @Override 
    public void onManagerConnected(int status) { 
     switch (status) { 
      case LoaderCallbackInterface.SUCCESS: // Callback method, called after OpenCV library initialization 
      { 
       FeatureDetector featureDetector = FeatureDetector.create(FeatureDetector.ORB); //or BRISK 
       MatOfKeyPoint keyPoints = new MatOfKeyPoint(); 
       Mat descriptors= new Mat(); 
       // desc2 = new Mat(); 
       DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB); //32Bytes per KeyPoint 
       DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT); 

      } break; 
      default: 
      { 
       super.onManagerConnected(status); 
      } break; 
     } 
    } 
}; 


@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    readAndWrite(); 
    Log.d("Name of 5 " + objectTab[5].name, "x" + objectTab[5].x); 
    Log.d("Name of 0 "+objectTab[0].name,"x "+objectTab[0].x); 
    Log.d("Name of 1 "+objectTab[1].name,"x "+objectTab[1].x); 
    Log.d("Name of 3 "+objectTab[3].name,"x "+objectTab[3].x); 
    for(int i=0; i<objectTab.length; i++) { 
     dataToSave = new String[]{objectTab[i].name, objectTab[i].color, objectTab[i].desc.toString(), String.valueOf(objectTab[i].x), String.valueOf(objectTab[i].y)}; 

     save(file2, dataToSave); 
    } 

    button = (Button) findViewById(R.id.button); 
    button2 = (Button) findViewById(R.id.button2); 
    button3 = (Button) findViewById(R.id.button3); 
    button.setFocusable(true); 

    button.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      Intent i = new Intent(getApplicationContext(),AddingObject.class); 
      MainActivity.this.startActivity(i); 

     } 
    }); 

    button2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(),LookObject.class); 
      MainActivity.this.startActivity(intent); 


     } 
    }); 

    button3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      android.os.Process.killProcess(android.os.Process.myPid()); 
      System.exit(1); 
     } 
    }); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); 
} 


@Override 
public void onBackPressed() { 
    moveTaskToBack(true); 
} 

// Before 2.0 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     moveTaskToBack(true); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

public void readAndWrite() { 
    try { 
     fis = new FileInputStream(file); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    try { 

     if (fis != null) { 

      // prepare the file for reading 
      InputStreamReader chapterReader = new InputStreamReader(fis); 
      BufferedReader buffreader = new BufferedReader(chapterReader); 
      int j = 1; 
      // read every line of the file into the line-variable, on line at the time 
      for (int i = 0; i < 150; i++, j++) { 
       // do { 
       line = buffreader.readLine(); 
       if (j == 1) { 
        name2 = line; 
       } else if (j == 2) { 
        color2 = line; 
       } else if (j == 3) { 

        descriptor2 = line; 

        File image = new File(descriptor2); 
        BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
        Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(), bmOptions); 
        bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true); 
        desc2 = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC1); 
        Utils.bitmapToMat(bitmap, desc2); 
        Imgproc.cvtColor(desc2, desc2, Imgproc.COLOR_RGB2GRAY); 
        //desc2 = Imgcodecs.imread(descriptor2); 
       } else if (j == 4) { 
        x2 = line; 
        xsec = Float.valueOf(x2); 
       } else if (j == 5) { 
        y2 = line; 
        ysec = Float.valueOf(y2); 

        j = 0; 
        objectTab[numer] = null; 
        objectTab[numer] = new ObjectRep(name2, color2, desc2, xsec, ysec); 
        Log.d("Przedmiot" + objectTab[numer].name, " "); 
        if(i==5){ 
         Log.d("Przedmiot i=5" + objectTab[5].name, " "); 
        } 

        clear(); 
        if (objectTab[numer] != null) { 
         Toast.makeText(getApplicationContext(), "Object added ", Toast.LENGTH_SHORT).show(); 
        } 
        numer++; 
       } 

      } 


     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Toast.makeText(getApplicationContext(), "adding failed", Toast.LENGTH_SHORT).show(); 
    } finally { 
     // close the file. 
     try { 
      fis.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 



public static void save(File file, String[] data) 
{ 
    FileOutputStream fos = null; 

    try 
    { 
     fos = new FileOutputStream(file, true); 
    } 
    catch (FileNotFoundException e) {e.printStackTrace();} 
    try 
    { 
     try 
     { 
      BufferedReader br = new BufferedReader(new FileReader(file)); 
      if (br.readLine() != null) { 
       fos.write("\n".getBytes()); 
      } 
      for (int i = 0; i<data.length; i++) 
      { 

       fos.write(data[i].getBytes()); 
       if (i < data.length-1) 
       { 
        fos.write("\n".getBytes()); 
       } 

      } 
     } 
     catch (IOException e) {e.printStackTrace();} 
    } 
    finally 
    { 
     try 
     { 
      fos.close(); 
     } 
     catch (IOException e) {e.printStackTrace();} 
    } 
} 


public void clear(){ 
    name2 = null; 
    color2 = null; 
    x2 = null; 
    y2 = null; 
    xsec = 0; 
    ysec = 0; 
    descriptor2 = null; 
    desc2 = null; 

} 

}

Класс, чтобы написать элементы:

public class ObjectRep implements Serializable { 

private static final long serialVersionUID = 1L; 
public static String name; 
public static String color; 
private byte []descriptors; 
private int cols; 
private int rows; 
private int elemSize; 
private int MatType; 
public static float x; 
public static float y; 
Mat desc; 




public ObjectRep(String name,String color, Mat desc, float x, float y){ 
    this.name=name; 
    this.desc = desc; 
    MatToBytes(desc); 
    this.color=color; 
    this.x = x; 
    this.y = y; 
} 



public Byte MatToBytes(Mat data){ 
    cols=data.cols(); 
    rows=data.rows(); 
    elemSize=(int)data.elemSize(); 
    MatType=data.type(); 
    descriptors=new byte[(int)(data.total()*data.elemSize())]; // elemSize is in bytes 
    data.get(rows, cols, descriptors); 
    return null;   //?? 
} 


public Mat bytesToMat(){ 
    if(descriptors!=null){ 
     Mat desc = new Mat(rows, cols, MatType); 
     desc.put(0, 0, descriptors); 
     return desc; 
    }else return null; 
} 

}

saved.csv:

таблица черный/хранение/эмулировать/0/Картины/picFolder/table_black.jpg 700,0 435,0 блабла блабла /storage/emulated/0/Pictures/picFolder/blabla_blabla.jpg 117,0 348,0 somesome somesome /storage/emulated/0/Pictures/picFolder/somesome_somesome.jpg 641,0 298,0 Nanana Nanana/хранение/эмулировать/0 /Pictures/picFolder/nanana_nanana.jpg 129,0 392,0 что-то что-то /storage/emulated/0/Pictures/picFolder/something_something.jpg 299,0 504,0 ноутбук белый /storage/emulated/0/Pictures/picFolder/laptop_white.jpg 404,0 572.0

и после этого у меня есть моя новая проверка .csv, который выглядит следующим образом:

ноутбук белого /storage/emulated/0/Pictures/picFolder/laptop_white.jpg 404,0 572,0 ноутбук белого /storage/emulated/0/Pictures/picFolder/laptop_white.jpg 404,0 572,0 ноутбук белого /storage/emulated/0/Pictures/picFolder/laptop_white.jpg 404,0 572,0 ноутбук белого /storage/emulated/0/Pictures/picFolder/laptop_white.jpg 404,0 572,0 ноутбук белый/хранение/эмулировать/0/Фотографии/picFolder/laptop_white.jpg 404,0 572,0

Я ценю каждую помощь

+0

Что вы программируете печать? в Log.d («Nazwa 5» + objectTab [5] .name, «x» + objectTab [5] .x); Log.d ("Nazwa 0" + objectTab [0] .name, "x" + objectTab [0] .x); Log.d ("Nazwa 1" + objectTab [1] .name, "x" + objectTab [1] .x); Log.d ("Nazwa 3" + objectTab [3] .name, "x" + objectTab [3].Икс); – reos

+0

Извините, это случайная проверка 5-го, 0-го и 3-го элементов, чтобы быть уверенными в имени и x, но в каждом «я» я получаю «ноутбук» как имя и «404.0» как x, а не другое значения. – johansonik

+0

Каков ваш выход в журнал во время этого процесса? – nasch

ответ

1

Ваша проблема здесь

} else if (j == 5) { 

... 

objectTab[numer] = new ObjectRep(name2, color2, desc2, xsec, ysec); 

... 

Когда вы читаете файл, который вы только загрузить objectTab при J = 5.

+0

Я думаю, что все в порядке, я, потому что я отлаживал это, и когда j = 5, каждая строка читается, а затем я могу создать этот объект. Объект создается правильно, но после этого метода, когда я хочу записать этот массив в новый файл, он видит только последний объект и перезаписывает каждый. – johansonik

+0

Я думаю, что ваш исходный файл отличается от того, что вы показываете в вопросе. Потому что на основе логики yuo есть только значение на строку. – reos

+0

Да, это файл csv, и в каждой строке есть другое значение, но в той же схеме: 1) имя 2) цвет 3) путь к файлу jpg 4) x 5) y – johansonik

Смежные вопросы