2013-08-27 135 views
-1

我的應用程序是當用戶點擊底部。它將顯示在像冊的圖像或另一個應用程序,並當用戶選擇圖像從庫然後顯示選擇的圖像形式的用戶錯誤顯示圖像形式SDcard

我找到ImagePath與方法FindPath()

"String imagePath = findPath(imageUri);" 
return type String . 

然後我顯示與

"Bitmap imageData = BitmapFactory.decodeFile(imagePath); 
image.setImageBitmap(imageData);" 
圖像的ImagePath

這是我的runtimeError ithink它是關於顯示圖像的錯誤

08-27 04:42:24.815: E/AndroidRuntime(1789): FATAL EXCEPTION: main 
08-27 04:42:24.815: E/AndroidRuntime(1789): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/13 }} to activity {com.example.gallerymagazine/com.example.gallerymagazine.MainActivity}: java.lang.NullPointerException 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at  android.app.ActivityThread.deliverResults(ActivityThread.java:3319) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3362) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.app.ActivityThread.access$1100(ActivityThread.java:141) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.os.Looper.loop(Looper.java:137) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at java.lang.reflect.Method.invoke(Method.java:511) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at dalvik.system.NativeStart.main(Native Method) 
08-27 04:42:24.815: E/AndroidRuntime(1789): Caused by: java.lang.NullPointerException 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at com.example.gallerymagazine.MainActivity.onActivityResult(MainActivity.java:62) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.app.Activity.dispatchActivityResult(Activity.java:5293) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3315) 
08-27 04:42:24.815: E/AndroidRuntime(1789):  ... 11 more 

這是我的代碼

package com.example.gallerymagazine; 

import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
private static final int browse_image = 1; 
private TextView text; 
private Button browse; 
private ImageView image; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    TextView text = (TextView) findViewById(R.id.text); 
    ImageView image = (ImageView) findViewById(R.id.image); 
    Button browse = (Button) findViewById(R.id.browse_image_button); 

    browse.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      intent.setType("image/*"); 
      startActivityForResult(Intent.createChooser(intent, "select app to pick image"),browse_image); 
     } 
    }); 


} 
protected void onActivityResult(int requestCode, int resultCode, Intent returnedIntent){ 
    super.onActivityResult(requestCode, resultCode, returnedIntent); 
    switch (requestCode){ 
    case browse_image: 
    if(resultCode != RESULT_CANCELED){ 
     if(resultCode == RESULT_OK){ 
      // เมือคลิกที่รูป ข้อมูลจะถูกส่งผ่านพารามิเตอร์ returnedIntent โดยมีผลลัพธ์เป็น URI(ฝช้ในการหาไฟล์พาด) 
      Uri imageUri = returnedIntent.getData(); 
      String msg = "URL::"+imageUri+"\n"; 
      // นำURI หาpath 
      String imagePath = findPath(imageUri); 
      msg += "Path::"+imagePath; 

      Log.i("Path",imagePath); 
      // นำpath ไปดึงรูปมาแสดง 
      Bitmap imageData = BitmapFactory.decodeFile(imagePath); 
      image.setImageBitmap(imageData); 
     } 
    }else{ 
      Log.e("ERROR","error happened"); 
     } 
    } 
} 

// method find path 
private String findPath(Uri imageUri) { 
    // TODO Auto-generated method stub 
    String imagePath; 
    String[] columns = {MediaStore.Images.Media.DATA}; 
    Cursor cursor = getContentResolver().query(imageUri, columns, null, null, null); 
    //จาก Gallery 
    if(cursor != null){ 

     int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     imagePath = cursor.getString(columnIndex); 
    //อื่นๆ 
    }else{ 
     imagePath = imageUri.getPath(); 
    } 
    return imagePath; 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

這是我的佈局顯示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 
<Button 
    android:id="@+id/browse_image_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Browse Image"/> 



<TextView 
    android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/browse_image_button" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="44dp" 
    android:text="TextView" /> 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:src="@drawable/ic_launcher" /> 

</RelativeLayout> 

請檢查它,謝謝你每天多

+1

請發表您的代碼 – nedaRM

+0

我的代碼被編輯 –

回答

1

在你onCreate方法改變這樣的:

TextView text = (TextView) findViewById(R.id.text); 
    ImageView image = (ImageView) findViewById(R.id.image); 
    Button browse = (Button) findViewById(R.id.browse_image_button); 

對此:

text = (TextView) findViewById(R.id.text); 
image = (ImageView) findViewById(R.id.image); 
browse = (Button) findViewById(R.id.browse_image_button); 

原因是,當你做到這一點

TextView text = (TextView) findViewById(R.id.text);

您正在定義不能用其他方法來訪問一個局部變量。所以當你嘗試引用它時你會得到一個空指針異常。

+0

謝謝everymuch –