创建对象:在onSaveCompleted

时间:2016-02-01 16:13:50

标签: java android object kiicloud

我按照Kii Cloud教程创建和实现了一个对象,并尝试将其实现到我自己的应用程序中。它基本上做的是,当用户点击" existingButton"时,它会打开一个新活动,用户可以从库中选择一个图像并上传它。我在第二项活动中没有遇到任何问题,但第一项活动的uri来自" null"到第二个活动,我最终得到一个NullPointerException,因为我试图解析一个空字符串。我通过调试器检查了这个问题,发现问题出现在第一个活动" onSaveCompleted"方法。 if(异常== null)条件不符合,这基本上意味着我得到某种异常,我想。然后,如果不满足(例如,CloudExecutionException异常)条件。结果,它显示了我的主要if的其他条件的Toast。代码如下。谢谢你的帮助。

第一项活动:

public class SendNotePreActivity extends AppCompatActivity {

public static final String APP_BUCKET_NAME = "tutorial";

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

    Button existingButton = (Button) findViewById(R.id.existingButton);
    existingButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            KiiBucket bucket = Kii.bucket(APP_BUCKET_NAME);
            KiiObject object = bucket.object();
            object.set("deneme", 313131);
            object.save(new KiiObjectCallBack() {

                @Override
                public void onSaveCompleted(int token, @NonNull KiiObject object,
                                            Exception exception) {
                    if (exception == null) {
                        final String uri = object.toUri().toString();
                        SharedPreferences.Editor mEditor = getSharedPreferences("args", MODE_PRIVATE).edit();
                        mEditor.putString("uri", uri);
                        mEditor.apply();
                        Toast.makeText(SendNotePreActivity.this, "SUCCESSFUL", Toast.LENGTH_LONG).show();
                    } else {
                        if (exception instanceof CloudExecutionException) {
                            Toast.makeText(SendNotePreActivity.this, "Please choose an image", Toast.LENGTH_LONG).show();
                        } else {
                            Toast.makeText(SendNotePreActivity.this, "Please choose an image222", Toast.LENGTH_LONG).show();
                        }
                    }
                }
            });
            Intent intent = new Intent(SendNotePreActivity.this, SendNoteActivity.class);
            startActivity(intent);
        }
    });
}
}

第二项活动:

public class SendNoteActivity extends AppCompatActivity {
ImageView imagePreview;
private static final int PICK_IMAGE = 1;
String filePath = null;
String objectUri = null;

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

    Button chooseButton = (Button) findViewById(R.id.chooseButton);
    chooseButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Note"), PICK_IMAGE);
        }
    });
    Button sendButton = (Button) findViewById(R.id.sendButton);
    sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (filePath == null) {
                Toast.makeText(SendNoteActivity.this, "Please choose an image", Toast.LENGTH_LONG).show();
            } else {
                uploadFile(filePath);
            }
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK && data != null) {
        Uri selectedFileUri = data.getData();
        imagePreview.setImageURI(selectedFileUri);
        filePath = getFilePathByUri(selectedFileUri);
        if (filePath == null) {
            Toast.makeText(SendNoteActivity.this, "File does not exist", Toast.LENGTH_LONG).show();
            return;
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
        Toast.makeText(SendNoteActivity.this, "Picking failed", Toast.LENGTH_SHORT).show();
    }
}

private String getFilePathByUri(Uri selectedFileUri) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        // Workaround of retrieving file image through ContentResolver
        // for Android4.2 or later
        String filePath = null;
        FileOutputStream fos = null;
        try {
            Bitmap bmp = MediaStore.Images.Media.getBitmap(
                    SendNoteActivity.this.getContentResolver(), selectedFileUri);

            String cacheDir = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + File.separator + "tutorialapp";
            File createDir = new File(cacheDir);
            if (!createDir.exists()) {
                createDir.mkdir();
            }
            filePath = cacheDir + File.separator + "upload.jpg";
            File file = new File(filePath);

            fos = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 95, fos);
            fos.flush();
            fos.getFD().sync();
        } catch (Exception e) {
            filePath = null;
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (Exception e) {
                    // Nothing to do
                }
            }
        }
        return filePath;
    } else {
        String[] filePathColumn = { MediaStore.MediaColumns.DATA };
        Cursor cursor = SendNoteActivity.this.getContentResolver().query(
                selectedFileUri, filePathColumn, null, null, null);

        if (cursor == null)
            return null;
        try {
            if (!cursor.moveToFirst())
                return null;
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            if (columnIndex < 0) {
                return null;
            }
            String picturePath = cursor.getString(columnIndex);
            return picturePath;
        } finally {
            cursor.close();
        }
    }
}
private void uploadFile(String path) {
    SharedPreferences prefs = getSharedPreferences("args", MODE_PRIVATE);
    objectUri = prefs.getString("uri", "OLMADI AQ");
    KiiObject object = KiiObject.createByUri(Uri.parse(objectUri));
    File f = new File(path);
    KiiUploader uploader = object.uploader(SendNoteActivity.this, f);
    uploader.transferAsync(new KiiRTransferCallback() {

        @Override
        public void onStart(KiiRTransfer operator) {
        }

        @Override
        public void onTransferCompleted(KiiRTransfer operator, Exception e) {
            if (e == null) {
                Toast.makeText(SendNoteActivity.this, "Successful", Toast.LENGTH_LONG).show();
            } else {
                Throwable cause = e.getCause();
                if (cause instanceof CloudExecutionException)
                    Toast.makeText(SendNoteActivity.this, "Error", Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(SendNoteActivity.this, "Error2", Toast.LENGTH_LONG).show();
            }
        }
    });
}
}

登录

FATAL EXCEPTION: main
                                                           Process: com.theoc.proto, PID: 8050
                                                           java.lang.NullPointerException: uriString
                                                               at android.net.Uri$StringUri.<init>(Uri.java:470)
                                                               at android.net.Uri$StringUri.<init>(Uri.java:460)
                                                               at android.net.Uri.parse(Uri.java:432)
                                                               at com.theoc.proto.SendNoteActivity.uploadFile(SendNoteActivity.java:163)
                                                               at com.theoc.proto.SendNoteActivity.access$000(SendNoteActivity.java:44)
                                                               at com.theoc.proto.SendNoteActivity$2.onClick(SendNoteActivity.java:82)
                                                               at android.view.View.performClick(View.java:4763)
                                                               at android.view.View$PerformClick.run(View.java:19821)
                                                               at android.os.Handler.handleCallback(Handler.java:739)
                                                               at android.os.Handler.dispatchMessage(Handler.java:95)
                                                               at android.os.Looper.loop(Looper.java:135)
                                                               at android.app.ActivityThread.main(ActivityThread.java:5272)
                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                               at java.lang.reflect.Method.invoke(Method.java:372)
                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)

1 个答案:

答案 0 :(得分:0)

将startActivity移动到onSaveCompleted,因为现在您在保存为finishec之前启动第二个活动