我试图从restApi与MVVM架构获取图像......我试过Log.d()检查它是返回正确的地址或不和地址是正确的,但仍然得到错误......请有人试图找出问题所在
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawerLayout = findViewById(R.id.drawerLayout);
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,
drawerLayout, R.string.open, R.string.close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
profileImage=findViewById(R.id.ProfileImage);
String token =getIntent().getStringExtra("token");
String mToken="token " + token;
viewModelClass=new ViewModelProvider(this).get(ViewModelClass.class);
viewModelClass.getProfile(mToken).observe(this, new Observer<Profile>() {
@Override
public void onChanged(Profile profile) {
Log.d("dfd","http://192.168.43.216:8000"+profile.getProfile_photo());
Picasso.get().load("http://192.168.43.216:8000" +profile.getProfile_photo()).into(profileImage);
}
});
}
错误。
java.lang.IllegalArgumentException: Target must not be null.
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:682)
at com.squareup.picasso.RequestCreator.into(RequestCreator.java:665)
at com.hrishi.myapplication.UserActivity$1.onResponse(UserActivity.java:70)
at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1.lambda$onResponse$0$DefaultCallAdapterFactory$ExecutorCallbackCall$1(DefaultCallAdapterFactory.java:82)
at retrofit2.-$$Lambda$DefaultCallAdapterFactory$ExecutorCallbackCall$1$3wC8FyV4pyjrzrYL5U0mlYiviZw.run(Unknown Source:6)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6724)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:495)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
我使用的是DrawerLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:layout_height="180dp">
<ImageView
android:id="@+id/ProfileImage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
实现导航视图的主布局。
<androidx.drawerlayout.widget.DrawerLayout
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"
android:fitsSystemWindows="true"
android:id="@+id/drawerLayout"
tools:context=".UserActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/toolbar_main"
android:id="@+id/toolbar"/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu_nav"
android:layout_gravity="start"/>
</androidx.drawerlayout.widget.DrawerLayout>
activity_user.xml中。
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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"
android:fitsSystemWindows="true"
android:id="@+id/drawerLayout"
tools:context=".UserActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/toolbar_main"
android:id="@+id/toolbar"/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu_nav"
android:layout_gravity="start"/>
</androidx.drawerlayout.widget.DrawerLayout>
nav_header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:layout_height="180dp">
<ImageView
android:id="@+id/ProfileImage"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
实际上,我在 "抽屉布局 "中使用了 "标题布局",如果我在主活动中创建imageView,那么显示的图像就会出现问题。
你会评论的行,而审查的网址
// Picasso.get().load("http://192.168.43.216:8000"+profile.getProfile_photo()).into(profileImage);
然后查看请求的url,在浏览器中打开url或尝试使用调试器,并选择对象和审查,如果你的字符串在getProfile_photo()dont是empyt或null......你添加验证时,显示字符串,如果是一个字符串或null,并为不崩溃的应用程序与picasso,我添加的url图片时,url是empyt或你可以使用一个图像文件。