上传文件解析继续重启然后失败?

时间:2015-09-21 21:19:13

标签: android parse-platform

请帮助我在这个问题上被困四天了! 我正在尝试上传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);
                        }
                    }
                });

            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

经过五天的尝试并且失败后发现它是1.4.2版本中引入的解析SDK中的一个错误,并且从那时起就停留了,所以我已经向他们报告过了。

所以,直到他们修复了我使用1.4.1版本的bug并且它可以工作,但是进度指示器似乎在版本1.5中得到了完善,所以它给你100%而且之前没有。但至少上传工作正在进行中。

答案 1 :(得分: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);
                    }
                });

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