2015-11-05 70 views
0

这段代码所做的就是采取保存在SQLite数据库每一个“项目”,多数民众赞成,并上传网上Parse.com的Android - 游标循环跳过第一行

请帮助我了解为什么这个代码犯规上传的第一项。我相信我已经把订单混合起来了。它似乎只从光标的第2行开始。

Cursor c = dbHelper.fetchAllProjects(); 
    String[] data; 
    c.moveToFirst(); 
    if (c != null) { 
     while (c.moveToNext()) { 

      Toast.makeText(getApplicationContext(), "Message : " + c.getCount(), Toast.LENGTH_LONG).show(); 

      String s = c.getString(5); 
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
      Date d = new Date(); 
      try { 
       d = dateFormat.parse(s); 
      } catch (ParseException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      data = new String[8]; 
      data[0] = c.getString(0); 
      data[1] = c.getString(1); 
      data[2] = c.getString(2); 
      data[3] = c.getString(3); 
      data[4] = c.getString(4); 
      data[6] = c.getString(6); 
      data[7] = c.getString(7); 

      Project p1 = new Project(Integer.valueOf(data[0]), data[1], data[2], data[3], data[4], d, data[6], data[7]); 

      ParseObject p2 = new ParseObject("Project"); 
      p2.put("projectSubject", p1.getProjectSubject()); 
      p2.put("projectType", p1.getProjectType()); 
      p2.put("projectTitle", p1.getProjectTitle()); 
      p2.put("projectWorth", p1.getProjectWorth()); 
      p2.put("projectDueDate", p1.getProjectDueDate()); 
      p2.put("projectDetails", p1.getProjectDetails()); 
      p2.put("email", "[email protected]"); 

      /////////////////////////////////// 

      ParseQuery<ParseObject> querySubject = ParseQuery.getQuery("Project"); 
      querySubject.whereEqualTo("projectSubject", p1.getProjectSubject()); 

      ParseQuery<ParseObject> queryTitle = ParseQuery.getQuery("Project"); 
      queryTitle.whereEqualTo("projectTitle", p1.getProjectTitle()); 

      ParseQuery<ParseObject> queryDetails = ParseQuery.getQuery("Project"); 
      queryDetails.whereEqualTo("projectDetails", p1.getProjectDetails()); 

      List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>(); 
      queries.add(querySubject); 
      queries.add(queryTitle); 
      queries.add(queryDetails); 

      ParseQuery<ParseObject> mainQuery = ParseQuery.or(queries); 
      mainQuery.findInBackground(new FindCallback<ParseObject>() { 
       @Override 
       public void done(List<ParseObject> list, com.parse.ParseException e) { 

        listSize = list.size(); 
        Toast.makeText(getApplicationContext(), "ListSize : " + listSize, Toast.LENGTH_LONG).show(); 

       } 
      }); 

      if (listSize == 0) { 

       p2.saveInBackground(); 

      } 


     } 
     c.close(); 
    } 
+0

按什么纪尧姆说,你可以使用一个do {}(()c.moveToNext)的while循环 – Pol

+0

甚至没有,而代替。如果在此之前没有其他测试 –

+0

实际上你是对的,如果他想保留moveToFirst指令 –

回答

1
c.moveToFirst(); 
if (c != null) { 
    while (c.moveToNext()) { 

那是你的问题

+0

谢谢,但它应该在什么顺序? – ChrisM

+1

那么,首先在使用对象后检查null是无意义的。之后,你应该只移动2次,否则这是正常的第一行被跳过 –

+0

只需删除c.moveToFirst();从你的代码和你应该没问题。 – Jun