Интерпретация сообщений об ошибках из logcat в Android studio

#java #android #android-studio

#java #Android #android-studio

Вопрос:

Я пытаюсь создать приложение, но когда я его тестирую, приложение вылетает до его открытия. Глядя на logcat, я получаю эти сообщения:

 2020-09-19 12:51:13.619 5686-5686/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.josullivan.mytestapplication, PID: 5686
java.lang.RuntimeException: Unable to start activity 
ComponentInfo{com.josullivan.mytestapplication/com.josullivan.mytestapplication.MainActivity}: 
android.view.InflateException: Binary XML file line #34 in 
com.josullivan.mytestapplication:layout/activity_main: Binary XML file line #34 in 
com.josullivan.mytestapplication:layout/activity_main: Error inflating class 
com.google.android.material.navigation.NavigationView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
    at 
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
 Caused by: android.view.InflateException: Binary XML file line #34 in 
com.josullivan.mytestapplication:layout/activity_main: Binary XML file line #34 in 
com.josullivan.mytestapplication:layout/activity_main: Error inflating class 
com.google.android.material.navigation.NavigationView
 Caused by: android.view.InflateException: Binary XML file line #34 in 
com.josullivan.mytestapplication:layout/activity_main: Error inflating class 
com.google.android.material.navigation.NavigationView
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
    at android.view.LayoutInflater.createView(LayoutInflater.java:852)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1004)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
    at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:696)
    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
    at com.josullivan.mytestapplication.MainActivity.onCreate(MainActivity.java:48)
    at android.app.Activity.performCreate(Activity.java:8000)
    at android.app.Activity.performCreate(Activity.java:7984)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
    at 
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2020-09-19 12:51:13.620 5686-5686/? E/AndroidRuntime: Caused by: android.view.InflateException: 
Couldn't resolve menu item onClick handler onClickHandler in class 
com.josullivan.mytestapplication.MainActivity
    at androidx.appcompat.view.SupportMenuInflater$InflatedOnMenuItemClickListener.<init> 
(SupportMenuInflater.java:255)
    at androidx.appcompat.view.SupportMenuInflater$MenuState.setItem(SupportMenuInflater.java:484)
    at androidx.appcompat.view.SupportMenuInflater$MenuState.addItem(SupportMenuInflater.java:531)
    at androidx.appcompat.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:207)
    at androidx.appcompat.view.SupportMenuInflater.inflate(SupportMenuInflater.java:129)
    at com.google.android.material.navigation.NavigationView.inflateMenu(NavigationView.java:366)
    at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:234)
    at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:121)
        ... 28 more
 Caused by: java.lang.NoSuchMethodException: 
com.josullivan.mytestapplication.MainActivity.onClickHandler [interface android.view.MenuItem]
    at java.lang.Class.getMethod(Class.java:2072)
    at java.lang.Class.getMethod(Class.java:1693)
    at androidx.appcompat.view.SupportMenuInflater$InflatedOnMenuItemClickListener.<init> 
(SupportMenuInflater.java:251)
        ... 35 more
  

В конце говорится, что он не может разрешить onClickHandler в пункте меню, который, я думаю, вызывает проблему, но я не знаю как. В моем приложении будет несколько фрагментов, каждый из которых (при условии, что я смогу заставить его работать) будет иметь несколько холстов для рисования фигур пальцем, поэтому я использовал onClickHandler для инициализации класса paintView в MainActivity.java с правильным пользовательским видом холста, чтобы рисовать пальцем на соответствующем виде.
Есть ли у вас какие-либо идеи, почему это вызывает эту проблему и как это исправить?
Я новичок в Java-кодировании, можете ли вы объяснить мне это, как будто мне 5 лет?
Большое спасибо

MainActivity.java

 package com.josullivan.mytestapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;






import android.view.Menu;
import android.view.MenuInflater;


import com.google.android.material.navigation.NavigationView;

public class MainActivity extends AppCompatActivity implements 
NavigationView.OnNavigationItemSelectedListener {

private DrawerLayout drawer;
private PaintView paintView;


public void onClickHandler(View view) {
    switch (view.getId()) {
        case R.id.nav_chat:
            paintView = (PaintView) findViewById(R.id.paintView1);
            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            paintView.init(metrics);
            break;
    }
 }


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

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, 
toolbar, R.string.navigation_drawer_open,R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    if (savedInstanceState == null) {
        


 getSupportFragmentManager().beginTransaction().replace( 
 R.id.fragment_container, 
 new MessageFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_message);
    }
 }




 @Override
 public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.nav_message:

            
 getSupportFragmentManager().beginTransaction().replace( 
 R.id.fragment_container, new MessageFragment()).commit();
            break;
        case R.id.nav_chat:

            getSupportFragmentManager().beginTransaction().replace( 
R.id.fragment_container, new ChatFragment()).commit();

            
            break;



        case R.id.nav_profile:
            getSupportFragmentManager().beginTransaction().replace( 
R.id.fragment_container, new ProfileFragment()).commit();
            break;
        case R.id.nav_share:
            Toast.makeText(this, "Share", Toast.LENGTH_SHORT).show();
            break;
        case R.id.nav_send:
            Toast.makeText(this, "Send", Toast.LENGTH_SHORT).show();
            break;
    }

    drawer.closeDrawer(GravityCompat.START);

    return true;
}

@Override
public void onBackPressed() {
    if (drawer.isDrawerOpen(GravityCompat.START)){
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}
}
  

Ответ №1:

  1. Что-то не так в XML-файле, соответствующем строке 34 проверки MainActivity, поскольку вывод сообщения предполагает «Строку двоичного файла XML # 34»
  2. Можете ли вы предоставить дополнительную информацию? Опубликуйте код MainActivity, реализован ли у вас onClickHandler или он отсутствует?

Комментарии:

1. Добавлен код MainActivity.java Я думаю, что это уже реализовано. Это в коде, который я только что добавил

2. Вы должны переопределить общедоступный абстрактный метод void onClick (View v) .

3. вы имеете в виду метод OnClickHandler? однако это не абстрактно. Когда я попытался добавить @Override строку над методом OnClickHandler, появляется красная строка и сообщение (при наведении на него курсора мыши), в котором говорится: Метод не переопределяет метод из своего суперкласса

4. Да, я думаю, проблема в том, что вы используете метод с именем «onClickHandler ()», который я не нахожу ни в одной документации… Используйте метод instead для переопределения onClick() — см. Ссылку developer.android.com/reference/android/view /…

5. ккз, я попробую. Я вернусь позже сегодня или завтра спасибо за помощь