简体   繁体   English

无法实例化活动-Android Studio

[英]Could not instantiate activity - android studio

I'm making an application in android studio and when starting one of my activities the app crashes and says that it could not instantiate the activity. 我正在android studio中制作一个应用程序,当启动我的活动之一时,该应用程序崩溃了,并说它无法实例化活动。

I checked the manifest file and the activity name was underlined red and it said "X is not a concrete class - Validate resources inside Android XML files." 我检查了清单文件,活动名称用红色下划线标出,并说“ X不是具体的类-验证Android XML文件中的资源”。

Any help would be appreciated, I have no idea why this isn't working. 任何帮助将不胜感激,我不知道为什么这不起作用。 I'm new to developing so I'm really sorry if this is a stupid question/please forgive my, I'm sure, poor code. 我是开发的新手,如果这是一个愚蠢的问题,敬请原谅我可怜的代码,对此我感到非常抱歉。

Here's the error I'm getting when I run the application 这是我运行应用程序时遇到的错误

    07-12 10:01:50.260 918-3861/? I/ActivityManager: START u0 {cmp=com.example.daniel.digit/.Results (has extras)} from uid 10226 on display 0
07-12 10:01:50.276 27379-27379/com.example.daniel.digit E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.daniel.digit, PID: 27379
                                                                          java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.daniel.digit/com.example.daniel.digit.Results}: java.lang.InstantiationException: java.lang.Class<com.example.daniel.digit.Results> cannot be instantiated
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                              at android.os.Looper.loop(Looper.java:148)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5422)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                           Caused by: java.lang.InstantiationException: java.lang.Class<com.example.daniel.digit.Results> cannot be instantiated
                                                                              at java.lang.Class.newInstance(Native Method)
                                                                              at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                              at android.os.Looper.loop(Looper.java:148) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:5422) 
                                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-12 10:01:50.281 918-4161/? W/ActivityManager:   Force finishing activity com.example.daniel.digit/.Results
07-12 10:01:50.284 918-4161/? W/ActivityManager:   Force finishing activity com.example.daniel.digit/.Questions
07-12 10:01:50.339 918-32759/? I/OpenGLRenderer: Initialized EGL, version 1.4
07-12 10:01:50.682 3271-14700/? W/MessageQueue: Handler (akgv) {896094c} sending message to a Handler on a dead thread
                                                java.lang.IllegalStateException: Handler (akgv) {896094c} sending message to a Handler on a dead thread
                                                    at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
                                                    at android.os.Handler.enqueueMessage(Handler.java:631)
                                                    at android.os.Handler.sendMessageAtTime(Handler.java:600)
                                                    at android.os.Handler.sendMessageDelayed(Handler.java:570)
                                                    at android.os.Handler.post(Handler.java:326)
                                                    at rbv.a(:com.google.android.gms:1065)
                                                    at akox.a(:com.google.android.gms:140)
                                                    at akuj.a(:com.google.android.gms:374)
                                                    at aksn.a(:com.google.android.gms:2077)
                                                    at akll.a(:com.google.android.gms:93)
                                                    at akmw.a(:com.google.android.gms:262)
                                                    at akmx.run(:com.google.android.gms:2049)
                                                    at akgv.handleMessage(:com.google.android.gms:233)
                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                    at android.os.Looper.loop(Looper.java:148)
                                                    at android.os.HandlerThread.run(HandlerThread.java:61)
07-12 10:01:50.785 918-931/? W/ActivityManager: Activity pause timeout for ActivityRecord{85c8890 u0 com.example.daniel.digit/.Results t49287 f}

Here's the code from that activity 这是该活动的代码

package com.example.daniel.digit;

import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.places.PlacePhotoMetadata;
import com.google.android.gms.location.places.PlacePhotoMetadataBuffer;
import com.google.android.gms.location.places.PlacePhotoMetadataResult;
import com.google.android.gms.location.places.Places;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.List;

import se.walkercrou.places.GooglePlaces;
import se.walkercrou.places.GooglePlacesInterface;
import se.walkercrou.places.Param;
import se.walkercrou.places.Place;
import se.walkercrou.places.Price;
import se.walkercrou.places.exception.GooglePlacesException;

abstract public class Results extends AppCompatActivity
        implements GooglePlacesInterface { //, GoogleApiClient.OnConnectionFailedListener {

    //Variables via intent from Questions
    Intent resultsIntent = getIntent();
    public String APIKEY = resultsIntent.getStringExtra("API_KEY"); //API Key
    public String RestaurantType = resultsIntent.getStringExtra("RestaurantType"); //Restaurant Type\
    public String Coordinates = resultsIntent.getStringExtra("Coordinates"); //Restaurant Type
    public Integer CostValue = resultsIntent.getIntExtra("CostValue", 0); //Cost Value
    public String API_URL = resultsIntent.getStringExtra("URI"); //API Request URI from URL Builder

    //Variables for view and card elements
    private TextView TextViewName1;
    private TextView TextViewName2;
    private ImageView Restaurant1Image;
    private ImageView Restaurant2Image;

    //Static variables
    public static int price;
    public static double Lat;
    public static double Lng;
    public static double Rating;
    public static String PlaceId;
    public static String Name;
    public static String PhotoRef;

    public GooglePlaces client;
    public List<Place> placesList;
    public String query;
    public String maxcost;
    public String mincost;
    public int counter = 0;
    //private GoogleApiClient mGoogleApiClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_results);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        //TextView variables
        TextViewName1 = (TextView) findViewById(R.id.restaurant1Name);
        TextViewName2 = (TextView) findViewById(R.id.restaurant2Name);

        //ImageView variables
        Restaurant1Image = (ImageView) findViewById(R.id.restaurant1Photo);
        Restaurant2Image = (ImageView) findViewById(R.id.restaurant2Photo);

        //sets query and mincost and maxcost
        query = (RestaurantType.equals("NO_TYPE") || RestaurantType.equals("Anything")) ? "Restaurant" : RestaurantType + "+Restaurant";
        mincost = (CostValue == 0) ? "0" : Integer.toString(CostValue - 2);
        maxcost = (CostValue == 0) ? "4" : Integer.toString(CostValue - 1);
        GooglePlaces client = new GooglePlaces(APIKEY);

        List<Place> placesList = client.getPlacesByQuery(query, Param.name("location").value(Coordinates),
                Param.name("minprice").value(mincost), Param.name("maxprice").value(maxcost),
                Param.name("opennow").value(true), Param.name("radius").value(MAXIMUM_RADIUS),
                Param.name("rankby=distance").value(true), Param.name("key").value(APIKEY));
    }

    public void btnRefreshOnClick (View v) {
        //run restaurantDetails twice
        restaurantDetails(counter);
        restaurantDetails(counter+1);

        //increase counter by 2
        counter = counter + 2;
    }

    public void restaurantDetails(int counter) {
        try {
            parse(client, placesList, getRequestHandler().get(API_URL), counter);
        } catch(Exception e) {
            throw new GooglePlacesException(e);
        }
        TextView restaurantName = ((counter%2) == 0) ? TextViewName1 : TextViewName2;
            //Assign name to TextView
            restaurantName.setText(Name);
}

   protected static void checkStatus(String statusCode, String errorMessage) {
        GooglePlacesException e = GooglePlacesException.parse(statusCode, errorMessage);
        if (e != null)
            throw e;
    }

    public static String parse(GooglePlaces client, List<Place> places, String str, int counter) {
        try {
            // parse json
            JSONObject json = new JSONObject(str);

            // check root elements
            String statusCode = json.getString(STRING_STATUS);
            checkStatus(statusCode, json.optString(STRING_ERROR_MESSAGE));
            if (statusCode.equals(STATUS_ZERO_RESULTS))
                return null;

            JSONArray results = json.getJSONArray(ARRAY_RESULTS);
            parseTextSearch(client, places, results, counter);

            return json.optString(STRING_NEXT_PAGE_TOKEN, null);
        }
        catch(Exception e){
            throw new GooglePlacesException(e);
        }
    }

    public static void parseTextSearch(GooglePlaces client, List<Place> places, JSONArray results,int counter) {
        try {
            if (counter >= results.length())
                return;

            JSONObject result = results.getJSONObject(counter);

            //Location
            JSONObject location = result.getJSONObject(OBJECT_GEOMETRY).getJSONObject(OBJECT_LOCATION);
            double Lat = location.getDouble(DOUBLE_LATITUDE);
            double Lng = location.getDouble(DOUBLE_LONGITUDE);

            String PlaceId = result.getString(STRING_PLACE_ID);
            String Name = result.optString(STRING_NAME);
            String PhotoRef = result.getString(STRING_PHOTO_REFERENCE);
            double Rating = result.optDouble(DOUBLE_RATING, -1);

            boolean priceDefined = result.has(INTEGER_PRICE_LEVEL);
            Price price = Price.NONE;
            if (priceDefined) {
                price = Price.values()[result.getInt(INTEGER_PRICE_LEVEL)];
            }
}

And if it's relevent, the manifest file 如果是相关事件,清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.daniel.digit">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:replace="android:icon,android:theme">
        <activity
            android:name=".SplashActivity"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
        <activity
            android:name=".Questions"
            android:label="@string/title_activity_questions"
            android:parentActivityName=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.daniel.digit.MainActivity" />
        </activity>

        <uses-library
            android:name="com.android.volley"
            android:required="false" />

        <activity
            android:name=".Results"
            android:label="@string/title_activity_results"
            android:parentActivityName=".Questions"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.daniel.digit.Questions"/>
        </activity>
        <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyDvyih-7txW-4ajp8whWMZj5RsuUfORIoo"/>
    </application>

</manifest>

The log says your Results activity cannot be instantiated. 日志显示您的Results活动无法实例化。 You have marked this as an abstract class - it is an error to try and instantiate an object of an abstract class in Java. 您已将其标记为抽象类-尝试实例化Java中抽象类的对象是错误的。

Unless you intend to extends this class and implement concrete methods and then instantiate that activity, remove the abstract keyword. 除非打算扩展此类并实现具体方法,然后实例化该活动,否则请删除abstract关键字。

Also you have a lot of static methods in your activity - this is a code smell. 另外,您的活动中有很多静态方法-这是代码的味道。

abstract class cannot be instantiated 抽象类无法实例化

abstract public class Results extends AppCompatActivity
        implements GooglePlacesInterface { //, GoogleApiClient.OnConnectionFailedListener {

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM