我如何用下载URI设置导航抽屉中显示的用户图像
public class UserProfileActivity extends AppCompatActivity {
private FloatingActionButton buttonSaveImage;
private FloatingActionButton buttonSelectImage;
private ImageView imageView;
private static final int PICK_IMAGE_REQUEST = 123;
private Uri filePath;
private FirebaseAuth mAuth;
private FirebaseStorage fStorage;
private ProgressDialog progressDialog;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
filePath = data.getData();
try {
Picasso.with(UserProfileActivity.this).load(filePath).fit().centerCrop().into(imageView);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_profile);
mAuth = FirebaseAuth.getInstance();
fStorage = FirebaseStorage.getInstance();
buttonSelectImage = (FloatingActionButton) findViewById(R.id.fab);
buttonSaveImage = (FloatingActionButton) findViewById(R.id.fab2);
imageView = (ImageView) findViewById(R.id.imageView);
progressDialog = new ProgressDialog(UserProfileActivity.this);
progressDialog.setMessage("Yükleniyor...");
progressDialog.setCancelable(false);
progressDialog.show();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
final View headerView = navigationView.getHeaderView(0);
final ImageView imageViewUser = (ImageView)headerView.findViewById(R.id.profile_image);
StorageReference storageRef = fStorage.getReference().child("users").child(mAuth.getCurrentUser().getUid());
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.i("URI VALUE","->"+ uri);
final ImageView imageViewUser = (ImageView)headerView.findViewById(R.id.profile_image);
progressDialog.dismiss();
Picasso.with(UserProfileActivity.this).load(uri).fit().centerCrop().into(imageView);
Picasso.with(UserProfileActivity.this).load(uri).fit().centerCrop().into(imageViewUser);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(UserProfileActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
buttonSelectImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
buttonSelectImage.setVisibility(View.INVISIBLE);
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Resim Seçiniz"), PICK_IMAGE_REQUEST);
buttonSaveImage.setVisibility(View.VISIBLE);
}
});
buttonSaveImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
buttonSaveImage.setVisibility(View.INVISIBLE);
if (filePath != null) {
progressDialog = new ProgressDialog(UserProfileActivity.this);
progressDialog.setMessage("Yükleniyor...");
progressDialog.setCancelable(false);
progressDialog.show();
StorageReference storageRef = fStorage.getReference().child("users").child(mAuth.getCurrentUser().getUid());
storageRef.putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(UserProfileActivity.this, "Fotoğraf başarılı bir şekilde kaydedildi.", Toast.LENGTH_SHORT).show();
imageView.setImageBitmap(null);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(UserProfileActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
buttonSelectImage.setVisibility(View.VISIBLE);
}
});
}
}
我使用Firebase存储来存储图像,我做得很好,但我不能在抽屉菜单中显示我为用户上传的图像图像查看器
Navigaiton收割台
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@color/overloyBackground"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp">
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/profile_image"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/user"
app:border_color="@android:color/white"
app:border_width="3dp" />
<TextView
android:id="@+id/txtFullName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:textSize="24sp"
android:text=""
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
</LinearLayout>
activity_user_profile
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:orientation="vertical">
<LinearLayout
android:id="@+id/viewA"
android:layout_width="match_parent"
android:layout_height="463dp"
android:layout_weight="0.6"
android:background="@android:color/white"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@drawable/no_image_user" />
</LinearLayout>
<LinearLayout
android:id="@+id/viewB"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.4"
android:background="@android:color/white"
android:orientation="horizontal">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="53dp"
android:layout_weight="1"
android:text="Name"
android:textSize="25sp"
/>
</LinearLayout>
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="69dp"
android:layout_height="69dp"
android:layout_margin="16dp"
android:background="@android:color/transparent"
android:clickable="true"
android:src="@drawable/camera"
app:layout_anchor="@id/viewA"
app:layout_anchorGravity="bottom|right|end"
tools:layout_editor_absoluteX="250dp"
tools:layout_editor_absoluteY="146dp" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab2"
android:layout_width="69dp"
android:layout_height="69dp"
android:layout_margin="16dp"
android:background="@android:color/transparent"
android:clickable="true"
android:visibility="visible"
android:src="@drawable/onay"
app:layout_anchor="@id/viewA"
app:layout_anchorGravity="bottom|right|end"
tools:layout_editor_absoluteX="299dp"
tools:layout_editor_absoluteY="146dp"/>
这是我的日志
致命异常:主进程:com。实例ytam。fonetegitim,PID:9482 java。lang.RuntimeException:无法启动activity ComponentInfo{com.example.ytam.fonetegitim/com.example.ytam.fonetegitim.UserProfileActivity}:java。lang.NullPointerException:尝试调用虚拟方法“android”。看法查看android。支持设计小装置。导航视图。getHeaderView(int)“”在android的空对象引用上。应用程序。活动线程。android上的performLaunchActivity(ActivityThread.java:2778)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2856)。应用程序。活动线程-android上的wrap11(未知来源:0)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1589)。操作系统。处理程序。android上的dispatchMessage(Handler.java:106)。操作系统。活套。android上的loop(Looper.java:164)。应用程序。活动线程。java上的main(ActivityThread.java:6494)。郎。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodandArgscaler。在com上运行(RuntimeInit.java:438)。Android内部的操作系统。合子岩。主要(ZygoteInit.java:807)由:java引起。lang.NullPointerException:尝试调用虚拟方法“android”。看法查看android。支持设计小装置。导航视图。getHeaderView(int)“”在com的空对象引用上。实例ytam。fonetegitim。UserProfileActivity。android上的onCreate(UserProfileActivity.java:77)。应用程序。活动在android上执行创建(Activity.java:6999)。应用程序。活动在android上执行创建(Activity.java:6990)。应用程序。仪表。android上的callActivityOnCreate(Instrumentation.java:1214)。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2731)。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:2856)
使用这种方法,我将url保存到我的数据库存储中
private void changeUserPhoto() {
StorageReference storageRef = fStorage.getReference().child("users").child(mAuth.getCurrentUser().getUid());
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
photoURL = uri.toString();
Picasso.with(UserProfileActivity.this).load(uri).fit().centerCrop().into(imageView);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
此外,我使用url制作导航标题图像
private void changePhoto(String myUrl) {
Picasso.with(this).load(myUrl).transform(new PhotoCircleTransform()).into(profile_image);
}
尝试下面的代码
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
StorageReference storageRef = fStorage.getReference().child("users").child(mAuth.getCurrentUser().getUid());
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
View headerView = navigationView.getHeaderView(0);
final ImageView imageViewUser = (ImageView)headerView.findViewById(R.id.profile_image);
progressDialog.dismiss();
Picasso.with(UserProfileActivity.this).load(uri).fit().centerCrop().into(imageViewUser);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(UserProfileActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
更改此您的id不匹配
使用此
final ImageView imageViewUser = (ImageView)headerView.findViewById(R.id.profile_image);
而不是这个
final ImageView imageViewUser = (ImageView)headerView.findViewById(R.id.txtFullName);
编辑
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
View headerView = navigationView.getHeaderView(0);
final ImageView imageViewUser = (ImageView)headerView.findViewById(R.id.profile_image);
StorageReference storageRef = fStorage.getReference().child("users").child(mAuth.getCurrentUser().getUid());
storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Log.i("URI VALUE","->"+ uri)
progressDialog.dismiss();
Picasso.with(UserProfileActivity.this).load(uri).fit().centerCrop().into(imageViewUser);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
cannot be converted to OnNavigationItemSelectedListener get this error on the line View headerView = navigationView.getHeaderView(0);
progressDialog.dismiss();
Toast.makeText(UserProfileActivity.this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
编辑新内容
final ImageView imageViewUser = (ImageView)navigationView.getHeaderView(0).(R.id.profile_image);
我是android新手。我想实现一个由项目列表组成的导航抽屉,单击它会打开一个新活动。基本上是所有活动的导航抽屉。当我从导航抽屉中选择一个项目时,特定的活动就会打开。导航抽屉代码是通过执行空活动来实现的。我想在所有活动中实现导航抽屉功能,这些活动被视为空活动,这些活动已经有了一些功能,导航抽屉功能也可以工作。请帮帮我。 这是activity_header档案 这是我的主要活动 这是头活动java代
我正在试用本教程中给出的导航抽屉(幻灯片菜单)。 上面的链接和我的不同之处在于,我试图调用活动而不是调用片段。当应用程序打开时,我无法看到导航抽屉菜单,我只能看到打开HOME活动的操作栏。 以下是我更改的代码:(是否需要一个片段,或者我可以在导航抽屉的第一个屏幕上使用活动?) 我如何解决这个问题,以便在我的家庭活动中显示导航抽屉? 更新: 我甚至尝试了以下链接中给出的选项: 如何使用导航抽屉调用我
在本活动中,我希望拥有导航抽屉,因此我扩展了'NavigationDrawer',在其他一些活动中,我希望使用相同的导航抽屉
问题内容: 有没有一种方法可以只配置一次导航抽屉,并在多个Activites上显示它? 问题答案: 为此,只需创建一个实现抽屉的BaseActivity类,然后让所有其他活动扩展该抽屉即可。
问题内容: 我的所有活动中都应该出现一个。 我看到许多与此类似的问题,并找到了一个解决方案,例如通过其他活动扩展MainActivity。 所以我将我的主要活动扩展到了我的第二个活动。但是第二个活动中没有显示抽屉 主要活动 第二活动 问题答案: 在in中,不要调用此方法: 使在保护。并 只需将抽屉标签和重力保持在左侧(或右侧)。