Piccasso MVVM Rest Api: цель не должна быть нулевой - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь получить изображение из 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 в основном действии, тогда отображается изображение

1 Ответ

0 голосов
/ 06 мая 2020

Вы прокомментируете строку при просмотре URL-адреса

// Picasso.get().load("http://192.168.43.216:8000"+profile.getProfile_photo()).into(profileImage);

Затем просмотрите URL-адрес запроса, откройте URL-адрес в своем браузере или попробуйте использовать отладчик и выберите объект и проверьте, если вы вводите строку в getProfile_photo ( ) dont is empyt или null ... вы добавляете проверки, когда отображаемая строка является строкой или null, а для не cra sh приложение с picasso, я добавляю изображение URL-адреса, когда URL-адрес является empyt, или вы можете использовать файл изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...