【问题标题】:Fail to load image from Uri in third activity在第三个活动中无法从 Uri 加载图像
【发布时间】:2017-09-01 20:01:27
【问题描述】:

我是 Android Studio 的初学者。我的应用程序允许我添加用户(fn、ln、adrs、Uri::ImageUri)并列出他们并查看他们的信息。 我希望能够在单击我的列表视图时显示一个用户的信息。

问题是我只得到一个空白空间而不是我想要的图像视图。

我的主要活动:

公共类 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:权限拒绝:从 pid=12644、uid=10280 读取 com.android.providers.media.MediaProvider uri content://media/external/images/media/810 需要 android.permission.READ_EXTERNAL_STORAGE 或 grantUriPermission ()

虽然我在清单文件中包含了这些权限:

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

【问题讨论】:

  • 向我们展示整个清单 XML
  • 我认为您需要运行时权限,但没有完整清单就无法判断
  • 您在哪个设备上运行该应用程序?我的意思是哪个 api 是无效的。

标签: java android permissions


【解决方案1】:

询问运行时权限 tutorial

【讨论】:

    【解决方案2】:

    我的问题出在 Manifest 文件中;

    原来是

    <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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      相关资源
      最近更新 更多