2017-09-01 72 views
0

我是Android Studio的新手。我的應用程序允許我添加用戶(fn,ln,adrs,Uri :: ImageUri)並列出它們並查看它們的信息。 我希望能夠顯示一個用戶的信息,當點擊我的列表視圖。未能加載來自Uri的圖像第三項活動

問題是,我只得到一個空白空間,而不是我想要的imageview。

我的主要活動:

公共類MainActivity延伸AppCompatActivity {

public static ArrayList <User> users =new ArrayList <User>(); 
public static User userSelected; 
public static ListView mListView; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(activity_main); 

    mListView = (ListView) findViewById(R.id.List); 

} 



public void InputInfo(View view) { 
    Intent AddEmployee = new Intent(this, NewEmployeeInfo.class); 
    startActivityForResult(AddEmployee,0); 

} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 

    super.onActivityResult(0, resultCode, data); 
    finaltest =NewEmployeeInfo .targetUri ; 
    UserAdapter useradapter; 
    useradapter = new UserAdapter (MainActivity .this, android.R.layout.simple_list_item_1, users ) ; 
    mListView.setAdapter(useradapter); 


    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) { 

      Intent appInfo = new Intent(MainActivity.this, DisplayInfo.class); 
      User temp= users.get(position); 
      userSelected =new User(temp.first_name ,temp.last_name,temp.adr,temp.url ); 

       startActivity(appInfo); 

     } 
    }); 
} 

    } 

我的第二個(其中,用戶輸入信息:

public class NewEmployeeInfo extends AppCompatActivity { 

public ImageView imageview; 
public ImageView targetImage; 
public User u; 
public static Bitmap photo; 
public static Uri targetUri; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_employee_info); 


} 

public void takePhoto(View view) { 
    Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(takePicture, 0); 
} 

public void pickphoto(View view) { 
    Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(pickPhoto, 1); 

} 

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    imageview = (ImageView) this.findViewById(imageView); 
    resultphoto(requestCode, resultCode, imageReturnedIntent); 
} 

public void Save(View view) { 



     Intent SaveDataIntent = new Intent(this, MainActivity.class); 

     EditText FN = (EditText) findViewById(R.id.editText); 
     EditText LN = (EditText) findViewById(R.id.editText5); 
     EditText ADDRESS = (EditText) findViewById(R.id.editText6); 

     String firstname = FN.getText().toString(); 
     String lastname = LN.getText().toString(); 
     String address = ADDRESS.getText().toString(); 

     if (firstname.length() == 0 || lastname.length() == 0 || address.length() == 0) { 


      Toast.makeText(this, "No Emty Fields!!", 
        Toast.LENGTH_LONG).show(); 
      return; 

     } 


     u = new User(firstname, lastname, address, targetUri); 
     users.add(u); 





      setResult(RESULT_OK, SaveDataIntent); 
      finish(); 
} 


private void resultphoto(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    switch (requestCode) { 

     case 0: 
      if (resultCode == RESULT_OK) { 
       targetUri = imageReturnedIntent.getData(); 

       imageview.setImageURI(targetUri); 
       imageReturnedIntent.getExtras().get("data"); 

      } 

      break; 
     case 1: 


      if (resultCode == RESULT_OK) { 
       targetUri = imageReturnedIntent.getData(); 
       targetImage = (ImageView) findViewById(imageView); 

       try { 

        photo = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri)); 
        targetImage.setImageBitmap(photo); 
       } catch (FileNotFoundException e) { 

        e.printStackTrace(); 
       } 
      } 
      break; 
    } 

} 

}

第三和最後一個(應顯示信息的地方)

public class DisplayInfo extends AppCompatActivity { 
public ImageView imageView; 
public Bitmap image; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_info); 

    TextView fn = (TextView) findViewById(R.id.firstname); 
    TextView ln = (TextView) findViewById(R.id.lastname); 
    TextView adr = (TextView) findViewById(R.id.address); 
    imageView = (ImageView) findViewById(R.id.imageView2); 

    fn.setText(MainActivity.userSelected.first_name); 
    ln.setText(MainActivity.userSelected.last_name); 
    adr.setText(MainActivity.userSelected.adr); 
    imageView.setImageURI(MainActivity.userSelected.url ) ; 

此錯誤不斷顯示出來

E/DatabaseUtils:寫入例外包裹 java.lang.SecurityException異常:權限拒絕:閱讀com.android.providers.media.MediaProvider URI內容:/ /媒體/外部/圖像/媒體從PID/810 = 12644,UID = 10280要求android.permission.READ_EXTERNAL_STORAGE,或grantUriPermission()

雖然我包括在我清單文件這些權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

+1

我們展示了整個清單XML – m0skit0

+0

我想你需要運行的權限,但不完全清單 –

+0

分不清哪個設備上,你運行應用程序?我的意思是哪個api是dut。 –

回答

0

我的問題是在清單文件;

這是

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".NewEmployeeInfo"> 
     android:parentActivityName=".MainActivity" > 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".MainActivity" /> 
    </activity> 
    <activity android:name=".DisplayInfo" /> 
    <activity android:name=".UserAdapterActivity"></activity> 


    <uses-permission 
     android:name="android.permission.READ_EXTERNAL_STORAGE" 
    /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
</application> 

我忘記了我的權限。它應該一直這樣

<?xml version="1.0" encoding="utf-8"?> 
 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 
    package="com.mobilonia.employeesapp"> 
 
    <uses-permission 
 
     android:name="android.permission.READ_EXTERNAL_STORAGE" 
 
     /> 
 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
 

 
    <application 
 
     android:allowBackup="true" 
 
     android:icon="@mipmap/ic_launcher" 
 
     android:label="@string/app_name" 
 
     android:roundIcon="@mipmap/ic_launcher_round" 
 
     android:supportsRtl="true" 
 
     android:theme="@style/AppTheme"> 
 
     <activity android:name=".MainActivity"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 

 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity> 
 
     <activity android:name=".NewEmployeeInfo"> 
 
      android:parentActivityName=".MainActivity" > 
 
      <meta-data 
 
       android:name="android.support.PARENT_ACTIVITY" 
 
       android:value=".MainActivity" /> 
 
     </activity> 
 
     <activity android:name=".DisplayInfo" /> 
 
     <activity android:name=".UserAdapterActivity"></activity> 
 

 

 

 
    </application> 
 

 
</manifest>