【问题标题】:nullpointerexception on azure blob天蓝色 blob 上的空指针异常
【发布时间】:2013-05-03 13:18:26
【问题描述】:

我正在尝试将我的相机应用程序连接到窗口 azure 中的 blob 存储。这就是我的应用程序的工作方式。它拍照然后将其显示在相机类的图像视图上。会有一个报告按钮,用户可以在其中从图库中选择图片,然后通过 SASURL 发送。不幸的是,我在报告类文件中收到一个错误,我找不到错误所在的位置。

下面是我的相机类代码:

public class Camera extends Activity{

ImageView iv;
InputStream is;
Button btnR, btnP, btnC;

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera);

    btnP = (Button)findViewById(R.id.btnPhoto);
    btnR = (Button)findViewById(R.id.btnReport);
    btnC = (Button)findViewById(R.id.btnCancel);
    iv = (ImageView) findViewById(R.id.imageView1);

    btnP.setOnClickListener(new OnClickListener(){

        public void onClick(View v){
            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, 0);
        }
    });

       btnC.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent(Camera.this, MainMenu.class);
                startActivity(intent);
            }
        });

       btnR.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent(Camera.this, Report.class);
                startActivity(intent);
            }
        });

}


protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(requestCode == 0)
    {
        Bitmap theImage = (Bitmap) data.getExtras().get("data");
        iv.setImageBitmap(theImage);
    }
}

}

下面是我的报告类代码:

public class Report extends Activity {
private StorageService mStorageService;
private final String TAG = "BlobsActivity";
private String mContainerName;
private ImageView mImgBlobImage;
private Uri mImageUri;
private AlertDialog mAlertDialog;

Button btnSelect, btnR;
ImageView iv;
TextView tv1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Get access to the storage service
    StorageApplication myApp = (StorageApplication) getApplication();
    mStorageService = myApp.getStorageService();
    //Get data from the intent that launched this activity
    Intent launchIntent = getIntent();
    mContainerName = launchIntent.getStringExtra("ContainerName");

    //Get the blobs for the selected container
    mStorageService.getBlobsForContainer(mContainerName);       


        setContentView(R.layout.report);
        tv1=(TextView) findViewById(R.id.editText1);            
        btnR = (Button)findViewById(R.id.btnReport);
        iv = (ImageView) findViewById(R.id.imageView1); 
        btnSelect = (Button)findViewById(R.id.btnSelect);
        //Set select image handler
        btnSelect.setOnClickListener(new OnClickListener() {                
            @Override
            public void onClick(View v) {
                selectImage();
            }
        });

btnR.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    mStorageService.getSasForNewBlob(mContainerName, tv1.getText().toString());
    }
});

    {

    JsonObject blob = mStorageService.getLoadedBlob();
    String sasUrl = blob.getAsJsonPrimitive("sasUrl").toString();
    (new ImageUploaderTask(sasUrl)).execute();
    }
    }

// Fire off intent to select image from gallery
protected void selectImage() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    startActivityForResult(intent, 1111);
}

// Result handler for any intents started with startActivityForResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        //handle result from gallary select
        if (requestCode == 1111) {
            Uri currImageURI = data.getData();
            mImageUri = currImageURI;
            //Set the image view's image by using imageUri
            mImgBlobImage.setImageURI(currImageURI);
        }
    } catch (Exception ex) {
        Log.e(TAG, ex.getMessage());
    }
}   

/***
 * Handles uploading an image to a specified url
 */
class ImageUploaderTask extends AsyncTask<Void, Void, Boolean> {
    private String mUrl;
    public ImageUploaderTask(String url) {
        mUrl = url;
    }

    @Override
    protected Boolean doInBackground(Void... params) {           
        try {
            //Get the image data
            Cursor cursor = getContentResolver().query(mImageUri, null,null, null, null);
            cursor.moveToFirst();
            int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
            String absoluteFilePath = cursor.getString(index);
            FileInputStream fis = new FileInputStream(absoluteFilePath);
            int bytesRead = 0;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            while ((bytesRead = fis.read(b)) != -1) {
                bos.write(b, 0, bytesRead);
            }
            byte[] bytes = bos.toByteArray();
            // Post our image data (byte array) to the server
            URL url = new URL(mUrl.replace("\"", ""));
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setDoOutput(true);
            urlConnection.setRequestMethod("PUT");
            urlConnection.addRequestProperty("Content-Type", "image/jpeg");
            urlConnection.setRequestProperty("Content-Length", ""+ bytes.length);
            // Write image data to server
            DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
            wr.write(bytes);
            wr.flush();
            wr.close();
            int response = urlConnection.getResponseCode();
            //If we successfully uploaded, return true
            if (response == 201
                    && urlConnection.getResponseMessage().equals("Created")) {
                return true;
            }
        } catch (Exception ex) {
            Log.e(TAG, ex.getMessage());
        }
        return false;           
    }

    @Override
    protected void onPostExecute(Boolean uploaded) {
        if (uploaded) {
            mAlertDialog.cancel();
            mStorageService.getBlobsForContainer(mContainerName);
        }
    }
}
}

LogCat 错误:

05-09 05:56:32.585: E/AndroidRuntime(1869): java.lang.RuntimeException: Unable to start activity     ComponentInfo{com.example.testproject/com.example.testproject.Report}: java.lang.NullPointerException
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.os.Looper.loop(Looper.java:137)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.ActivityThread.main(ActivityThread.java:4745)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at java.lang.reflect.Method.invokeNative(Native Method)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at java.lang.reflect.Method.invoke(Method.java:511)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at dalvik.system.NativeStart.main(Native Method)
05-09 05:56:32.585: E/AndroidRuntime(1869): Caused by: java.lang.NullPointerException
05-09 05:56:32.585: E/AndroidRuntime(1869):     at com.example.testproject.Report.onCreate(Report.java:77)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.Activity.performCreate(Activity.java:5008)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-09 05:56:32.585: E/AndroidRuntime(1869):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

【问题讨论】:

  • Report.java 77 的行是什么?
  • 您从哪个活动开始报告?
  • report.java class line 77 你的意思是?这里是String sasUrl = blob.getAsJsonPrimitive("sasUrl").toString();
  • @ρяσѕρєя K 我从相机课活动开始
  • @user2316009:目前我无法在相机类活动中找到intent.putExtra("ContainerName",anyvalue)?确保你通过它

标签: java android azure azure-blob-storage


【解决方案1】:

String sasUrl = blob.getAsJsonPrimitive("sasUrl").toString(); 行的 blob 对象为空。所以它抛出了NullPointerException,因为你试图在null的对象上调用一个方法。

确保mStorageService.getLoadedBlob() 不返回null

【讨论】:

  • 我如何不通过空 blob?我不太确定我是否错过了任何基本代码。
  • 对不起伙计,我不了解 azure。
猜你喜欢
  • 2021-01-19
  • 2019-07-18
  • 2013-08-12
  • 2015-03-27
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多