2015-09-21 38 views
0

请帮忙我在这个问题上被困了四天! 我想上传PDF文件解析,但在重新启动时,它达到100%,经过一番尝试失败并给予例外:上传解析文件继续重启,然后失败?

com.parse.ParseRequest $ ParseRequestException:I/O故障

但有时工作了一些文件。

有我的代码。

public class MainActivity extends AppCompatActivity { 
    public static final String TAG = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent choosePhotoIntent = new Intent(Intent.ACTION_GET_CONTENT); 
       choosePhotoIntent.setType("pdf/*"); 
       startActivityForResult(choosePhotoIntent, 1); 

      } 
     }); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
      if (requestCode == 1) { 
       Log.d(TAG, "onActivityResult() returned: "); 
       Uri pdfUri = data.getData(); 
       byte[] fileBytes = FileHelper.getByteArrayFromFile(this, pdfUri); 
       //replace spaces with "_" because parse don't accept file name with spaces. 
       String fileName = pdfUri.getLastPathSegment().replaceAll("\\s+", "_"); 

       Log.d(TAG, "pdf uri: " + pdfUri); 
       Log.d(TAG, "pdf fileName: " + fileName); 


       ParseObject parseObject = new ParseObject("bigPdf"); 

       ParseFile parseFile = new ParseFile("fileName", fileBytes); 
       parseObject.put("pdf", parseFile); 

       parseFile.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          Log.d(TAG, "done "); 
         } else { 
          Log.e(TAG, "done: ", e); 
         } 
        } 
       }, new ProgressCallback() { 
        @Override 
        public void done(Integer percentDone) { 
         Log.d(TAG, "done " + percentDone); 
        } 
       }); 


       parseObject.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          Log.d(TAG, "done "); 
         } else { 
          Log.e(TAG, "done: ", e); 
         } 
        } 
       }); 

      } 
     } 
    } 
} 

回答

1

尝试后五天和失败的事实证明,这是在1.4.2版本中引入解析SDK中的错误和住从那时起,所以我就向他们报告。

,直到他们修复这个bug我使用1.4.1版和它的作品,但进度指示器似乎它是在1.5版本compleated所以它之前给你100%的并没有什么。但至少上传正在工作。

0

看起来你要保存的解析对象的文件被保存后,所以它看起来像这样:

   final ParseObject parseObject = new ParseObject("bigPdf"); 

       ParseFile parseFile = new ParseFile("fileName", fileBytes); 
       parseObject.put("pdf", parseFile); 

       parseFile.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          Log.d(TAG, "done "); 

          parseObject.saveInBackground(new SaveCallback() { 
          @Override 
          public void done(ParseException e) { 
          if (e == null) { 
           Log.d(TAG, "done "); 
          } else { 
           Log.e(TAG, "done: ", e); 
          } 
         } 
        }); 
         } else { 
          Log.e(TAG, "done: ", e); 
         } 
        } 
       }, new ProgressCallback() { 
        @Override 
        public void done(Integer percentDone) { 
         Log.d(TAG, "done " + percentDone); 
        } 
       }); 

可能还有其他的问题,但它看起来就像是从哪里开始。

+0

是我的代码和你之间的区别!与您的代码相同的问题。 – humazed

+1

在保存解析对象之前,您的代码不会等待文件保存操作完成。 Mine将解析对象保存到文件保存回调中。 – nasch

+0

对不起,我第一次不明白,但解析SDK自己处理它,并在保存对象之前等待文件被保存。所以这就是这个问题;无论如何,我尝试了你的代码和问题相同,所以这是一个SDK中的错误,因为当我用我的答案中描述的旧的时候,我的问题解决了。 任何方式谢谢 – humazed