0

I have seen multiple questions like this on this forum, but nothing I found helped me.

So what's basically happening is that I have an App, which works perfectly fine on my device. I wrote that app for my mother, who has an older phone (Samsung S5neo - Android 6.0.1(API 23)) and for some reason it doesn't work on there.

It show's this error message in the LogCat:

    Process: com.gevi.berstunden, PID: 18800
    android.view.InflateException: Binary XML file line #47: Binary XML file line #47: Error inflating class EditText
        at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:380)
        at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474)
        at android.app.Dialog.setContentView(Dialog.java:837)
        at com.gevi.berstunden.MainActivity.onAddHourClick(MainActivity.java:81)
        at com.gevi.berstunden.MainActivity.lambda$initViews$0$MainActivity(MainActivity.java:64)
        at com.gevi.berstunden.-$$Lambda$MainActivity$Koi270rAtPv4jlW335vCcd1sR2Y.onClick(lambda)
        at android.view.View.performClick(View.java:5698)
        at android.widget.TextView.performClick(TextView.java:10846)
        at android.view.View$PerformClick.run(View.java:22565)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:7230)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
     Caused by: android.view.InflateException: Binary XML file line #47: Error inflating class EditText
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
        at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
        at android.app.Dialog.setContentView(Dialog.java:837) 
        at com.gevi.berstunden.MainActivity.onAddHourClick(MainActivity.java:81) 
        at com.gevi.berstunden.MainActivity.lambda$initViews$0$MainActivity(MainActivity.java:64) 
        at com.gevi.berstunden.-$$Lambda$MainActivity$Koi270rAtPv4jlW335vCcd1sR2Y.onClick(lambda) 
        at android.view.View.performClick(View.java:5698) 
        at android.widget.TextView.performClick(TextView.java:10846) 
        at android.view.View$PerformClick.run(View.java:22565) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7230) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
     Caused by: android.content.res.Resources$NotFoundException: Resource "com.gevi.berstunden:drawable/popupedittext_round" (7f070081) is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f070081 a=-1 r=0x7f070081}
        at android.content.res.Resources.loadDrawableForCookie(Resources.java:4178)
        at android.content.res.Resources.loadDrawable(Resources.java:4085)
        at android.content.res.Resources.loadDrawable(Resources.java:3935)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:886)
        at android.view.View.<init>(View.java:4226)
        at android.widget.TextView.<init>(TextView.java:948)
        at android.widget.EditText.<init>(EditText.java:90)
        at android.widget.EditText.<init>(EditText.java:86)
        at androidx.appcompat.widget.AppCompatEditText.<init>(AppCompatEditText.java:73)
        at androidx.appcompat.widget.AppCompatEditText.<init>(AppCompatEditText.java:69)
        at androidx.appcompat.app.AppCompatViewInflater.createEditText(AppCompatViewInflater.java:197)
        at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:115)
        at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1407)
        at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1457)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:758)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:847) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:527) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:429) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:380) 
        at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:474) 
        at android.app.Dialog.setContentView(Dialog.java:837) 
        at com.gevi.berstunden.MainActivity.onAddHourClick(MainActivity.java:81) 
        at com.gevi.berstunden.MainActivity.lambda$initViews$0$MainActivity(MainActivity.java:64) 
        at com.gevi.berstunden.-$$Lambda$MainActivity$Koi270rAtPv4jlW335vCcd1sR2Y.onClick(lambda) 
        at android.view.View.performClick(View.java:5698) 
        at android.widget.TextView.performClick(TextView.java:10846) 
        at android.view.View$PerformClick.run(View.java:22565) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7230) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

On YouTube I found people saying I should add a dependency to my buil.gradle (implementation 'com.android.support:design:28.0.0'), but this didn't help either. I also tried using older versions of this.

My main code is:

package com.gevi.berstunden;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity {

   Dialog dialog;
   Dialog dateDialog;
   Dialog fromTimeDialog;
   Dialog toTimeDialog;

   String date;
   String fromTime;
   String toTime;
   String reason;

   RecyclerView recyclerView;
   TextView textView;
   TextView totalHoursTextViews;
   RecyclerViewListManager manager;
   RecyclerViewListAdapter adapter;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       initManager();
       initViews();

   }

   protected void initManager() {
       manager = new RecyclerViewListManager(this);
       adapter = new RecyclerViewListAdapter(manager);
   }

   protected void initViews() {
       recyclerView = findViewById(R.id.RecyclerView);
       recyclerView.setLayoutManager(new LinearLayoutManager(this));
       recyclerView.setAdapter(adapter);
       adapter.setOnItemClickListener(new RecyclerViewListAdapter.onItemClickListener() {
           @Override
           public void onItemClick(int position) {

           }
       });
       ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new HourListTouchCallback(manager, recyclerView));
       itemTouchHelper.attachToRecyclerView(recyclerView);
       textView = findViewById(R.id.addTextView);
       textView.setOnClickListener(view -> onAddHourClick());
       totalHoursTextViews = findViewById(R.id.totalHoursTextView);
       totalHoursTextViews.setText(String.valueOf(manager.getTotalHours()));
       dialog = new Dialog(this);
       dateDialog = new Dialog(this);
       fromTimeDialog = new Dialog(this);
       toTimeDialog = new Dialog(this);
   }

   protected void onAddHourClick() {

       TextView setDate;
       TextView setFromTime;
       TextView setToTime;
       EditText setReason;
       TextView close;

       dialog.setContentView(R.layout.popup);
       setDate = dialog.findViewById(R.id.setDateTextView);
       setDate.setOnClickListener(view -> onSetDateClick());
       setFromTime = dialog.findViewById(R.id.setFromTimeTextView);
       setFromTime.setOnClickListener(view -> onFromTimeClick());
       setToTime = dialog.findViewById(R.id.setToTimeTextView);
       setToTime.setOnClickListener(view -> onToTimeClick());
       setReason = dialog.findViewById(R.id.reasonEditText);
       close = dialog.findViewById(R.id.enterTextView);
       close.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Hour hour = new Hour();
               hour.setDate(date);
               hour.setFromTime(fromTime);
               hour.setToTime(toTime);
               int hours = Integer.parseInt(toTime.substring(0,2)) - Integer.parseInt(fromTime.substring(0, 2));
               int minutes = Integer.parseInt(toTime.substring(3)) - Integer.parseInt(fromTime.substring(3));
               reason = setReason.getText().toString();
               hour.setReason(reason);
               hour.setHours(hours);
               hour.setMinutes(minutes);
               manager.addHour(hour);
               adapter.notifyItemInserted(manager.getHourCount() - 1);
               totalHoursTextViews.setText(String.valueOf(manager.getTotalHours()));
               dialog.dismiss();
           }
       });

       dialog.show();
   }

   protected void onSetDateClick() {

       DatePicker datePicker;
       TextView enter_date;

       dateDialog.setContentView(R.layout.date_popup);

       datePicker = dateDialog.findViewById(R.id.datepicker);
       enter_date = dateDialog.findViewById(R.id.enter_date);
       enter_date.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               date = String.valueOf(datePicker.getDayOfMonth()) + "." + String.valueOf(datePicker.getMonth()) + "." + String.valueOf(datePicker.getYear());
               dateDialog.dismiss();
           }
       });

       dateDialog.show();
   }

   protected void onFromTimeClick() {

       TimePicker timePicker;
       TextView enter_fromTime;

       fromTimeDialog.setContentView(R.layout.fromtime_popup);

       timePicker = fromTimeDialog.findViewById(R.id.fromTime_timepicker);
       timePicker.setIs24HourView(true);
       enter_fromTime = fromTimeDialog.findViewById(R.id.enter_fromTime);
       enter_fromTime.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               int hourlenght = String.valueOf(timePicker.getHour()).length();
               int minutelenght = String.valueOf(timePicker.getMinute()).length();

               if(hourlenght == 1) {
                   if(minutelenght == 1) {
                       fromTime = "0" + String.valueOf(timePicker.getHour()) + ":0" + String.valueOf(timePicker.getMinute());
                   }
                   if(minutelenght == 2) {
                       fromTime = "0" + String.valueOf(timePicker.getHour()) + ":" + String.valueOf(timePicker.getMinute());
                   }
               }
               if(hourlenght == 2) {
                   if(minutelenght == 1) {
                       fromTime = String.valueOf(timePicker.getHour()) + ":0" + String.valueOf(timePicker.getMinute());
                   }
                   if(minutelenght == 2) {
                       fromTime = String.valueOf(timePicker.getHour()) + ":" + String.valueOf(timePicker.getMinute());
                   }
               }

               fromTimeDialog.dismiss();
           }
       });

       fromTimeDialog.show();
   }

   protected void onToTimeClick() {

       TimePicker timePicker;
       TextView enter_toTime;

       toTimeDialog.setContentView(R.layout.totime_popup);

       timePicker = toTimeDialog.findViewById(R.id.toTime_timepicker);
       timePicker.setIs24HourView(true);
       enter_toTime = toTimeDialog.findViewById(R.id.enter_toTime);
       enter_toTime.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               int hourlenght = String.valueOf(timePicker.getHour()).length();
               int minutelenght = String.valueOf(timePicker.getMinute()).length();

               if(hourlenght == 1) {
                   if(minutelenght == 1) {
                       toTime = "0" + String.valueOf(timePicker.getHour()) + ":0" + String.valueOf(timePicker.getMinute());
                   }
                   if(minutelenght == 2) {
                       toTime = "0" + String.valueOf(timePicker.getHour()) + ":" + String.valueOf(timePicker.getMinute());
                   }
               }
               if(hourlenght == 2) {
                   if(minutelenght == 1) {
                       toTime = String.valueOf(timePicker.getHour()) + ":0" + String.valueOf(timePicker.getMinute());
                   }
                   if(minutelenght == 2) {
                       toTime = String.valueOf(timePicker.getHour()) + ":" + String.valueOf(timePicker.getMinute());
                   }
               }

               toTimeDialog.dismiss();
           }
       });

       toTimeDialog.show();
   }
}

and the corresponding xml file is the following:

<LinearLayout
    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:orientation="vertical"
    android:weightSum="100"
    tools:context=".MainActivity"
    android:background="@color/colorPrimary">

   <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:padding="30dip"
       android:text="@string/topTextView"
       android:textSize="100px"
       android:textColor="@color/text_color"
       android:layout_gravity="center"
       android:gravity="center"/>

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="100"
        android:id="@+id/RecyclerView"
        tools:listitem="@layout/row"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/totalHoursTextView"
        android:text="Stunden: 23.5"
        android:textSize="80px"
        android:textColor="@color/text_color"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_marginTop="20dip"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/addTextView"
        android:layout_margin="20dip"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/addHoursTextView"
        android:textColor="@color/near_white"
        android:textSize="30dip"
        android:background="@drawable/textview_round"
        android:padding="5dip"/>

</LinearLayout>

however I followed the error log of the LogCat, pinpointing the issue to the Dialogs xml-file:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:padding="20dip"
    android:background="@color/colorPrimary">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="30dip"
        android:id="@+id/setDateTextView"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/setDate"
        android:textColor="@color/near_white"
        android:background="@drawable/popuptextview_round"
        android:padding="5dip"
        android:layout_marginBottom="15dip"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="30dip"
        android:id="@+id/setFromTimeTextView"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/setFromTime"
        android:textColor="@color/near_white"
        android:background="@drawable/popuptextview_round"
        android:padding="5dip"
        android:layout_marginBottom="15dip"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="30dip"
        android:id="@+id/setToTimeTextView"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/setToTime"
        android:textColor="@color/near_white"
        android:background="@drawable/popuptextview_round"
        android:padding="5dip"
        android:layout_marginBottom="15dip"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="30dip"
        android:id="@+id/reasonEditText"
        android:layout_gravity="center"
        android:gravity="center"
        android:hint="@string/addReasonEditTextHint"
        android:textColorHint="@color/hint_color"
        android:textColor="@color/text_color"
        android:background="@drawable/popupedittext_round"
        android:padding="5dip"
        android:layout_marginBottom="20dip"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="30dip"
        android:id="@+id/enterTextView"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="@string/popup_enter"
        android:textColor="@color/near_white"
        android:background="@drawable/popuptextview_round"
        android:padding="5dip"/>

</LinearLayout>
TK36
  • 332
  • 3
  • 11
  • what is at line 47? – Krupal Shah Apr 10 '20 at 11:52
  • That stack trace is saying that a drawable you've set on your `` is failing to load. Which specific folder is your `popupedittext_round` drawable in? And which Android version are you testing on? – Mike M. Apr 10 '20 at 11:52
  • popupedittext_round is in app/res/drawable – TK36 Apr 10 '20 at 12:06
  • Is there a suffix on that; e.g., a little `(v24)` at the end of the name? Also, what kind of drawable is it, specifically? That is, a JPG, a PNG, some sort of XML, etc.? And which Android version are you testing on? – Mike M. Apr 10 '20 at 12:09
  • there is a little (v24) and it's a xml_file with . Android Version 6.0.1(API 23) – TK36 Apr 10 '20 at 12:17
  • Yeah, that's your problem, then. That suffix means that the drawables in that folder are only available on API level 24 and above. You need to move it into the base `res/drawable/` folder. – Mike M. Apr 10 '20 at 12:19
  • Ah, did you get it figured out while I was typing? :-) Cool. No problem. Cheers! – Mike M. Apr 10 '20 at 12:20

0 Answers0