Piccasso MVVM Rest Api:target必须不为空。

问题描述 投票:0回答:1

我试图从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,那么显示的图像就会出现问题。

android
1个回答
0
投票

你会评论的行,而审查的网址

// 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或你可以使用一个图像文件。

© www.soinside.com 2019 - 2024. All rights reserved.