致命异常主要在我的应用程序中

时间:2016-11-10 23:20:05

标签: android android-resources

我在尝试启动应用时遇到此错误

11-10 19:02:51.700 8446-8446/com.example.android.stratosphere E/AndroidRuntime: FATAL EXCEPTION: main
                                                                            Process: com.example.android.stratosphere, PID: 8446
                                                                            java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.stratosphere/com.example.android.stratosphere.MainActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown>
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
                                                                                at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                at android.os.Looper.loop(Looper.java:148)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5443)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
                                                                             Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class <unknown>
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                                                                                at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393)
                                                                                at android.app.Activity.setContentView(Activity.java:2170)
                                                                                at com.example.android.stratosphere.MainActivity.onCreate(MainActivity.java:54)
                                                                                at android.app.Activity.performCreate(Activity.java:6245)
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
                                                                                at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:148) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5443) 
                                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                                                                             Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
                                                                                at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                                                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694)
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762)
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                                at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) 
                                                                                at android.app.Activity.setContentView(Activity.java:2170) 
                                                                                at com.example.android.stratosphere.MainActivity.onCreate(MainActivity.java:54) 
                                                                                at android.app.Activity.performCreate(Activity.java:6245) 
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
                                                                                at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:148) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5443) 
                                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                                                                             Caused by: java.lang.reflect.InvocationTargetException
                                                                                at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                                at android.view.LayoutInflater.createView(LayoutInflater.java:619)
                                                                                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                                                                                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694) 
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762) 
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                                at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) 
                                                                                at android.app.Activity.setContentView(Activity.java:2170) 
                                                                                at com.example.android.stratosphere.MainActivity.onCreate(MainActivity.java:54) 
                                                                                at android.app.Activity.performCreate(Activity.java:6245) 
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
                                                                                at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:148) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5443) 
                                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                                                                             Caused by: java.lang.OutOfMemoryError: Failed to allocate a 155750412 byte allocation with 2425818 free bytes and 89MB until OOM
                                                                                at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                                at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                                at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
                                                                                at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
                                                                                at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
                                                                                at android.content.res.Resources.loadDrawableForCookie(Resources.java:2638)
                                                                                at android.content.res.Resources.loadDrawable(Resources.java:2543)
                                                                                at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
                                                                                at android.view.View.<init>(View.java:3951)
                                                                                at android.view.ViewGroup.<init>(ViewGroup.java:573)
                                                                                at android.widget.LinearLayout.<init>(LinearLayout.java:203)
                                                                                at android.widget.LinearLayout.<init>(LinearLayout.java:199)
                                                                                at android.widget.LinearLayout.<init>(LinearLayout.java:195)
                                                                                at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                                                at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
                                                                                at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                                                                                at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694) 
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762) 
                                                                                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                                at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
                                                                                at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:393) 
                                                                                at android.app.Activity.setContentView(Activity.java:2170) 
                                                                                at com.example.android.stratosphere.MainActivity.onCreate(MainActivity.java:54) 
                                                                                at android.app.Activity.performCreate(Activity.java:6245) 
                                                                                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
                                                                                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                                                                                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490) 
                                                                                at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354) 
                                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                at android.os.Looper.loop(Looper.java:148) 
                                                                                at android.app.ActivityThread.main(ActivityThread.java:5443) 
                                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

我的主要活动代码是

package com.example.android.stratosphere;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;

import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;

import org.json.JSONException;

import static com.example.android.stratosphere.R.id.time;
import static java.util.Calendar.PM;

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener {


private TextView cityText;
private TextView condDescr;
private TextView temp;
private TextView press;
private TextView windSpeed;
private TextView windDeg;
private String location;
private TextView hum;
private ImageView imgView;
private Spinner spinner;
private static final String[] paths = {"Choose your Location", "Plymouth", "Olveston", "Woodlands", "Cheapend", "Brades", "Soldier Ghaut", "Geralds"};

/**
 * ATTENTION: This was auto-generated to implement the App Indexing API.
 * See https://g.co/AppIndexing/AndroidStudio for more information.
 */
private GoogleApiClient client;
JSONWeatherTask task;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String location = "London,UK";

    cityText = (TextView) findViewById(R.id.cityText);
    cityText.setText("Montserrat");
    condDescr = (TextView) findViewById(R.id.condDescr);
    temp = (TextView) findViewById(R.id.temperature_tv);
    hum = (TextView) findViewById(R.id.humidity_tv);
    press = (TextView) findViewById(R.id.atmospress_tv);
    windSpeed = (TextView) findViewById(R.id.wind_speed_tv);
    windDeg = (TextView) findViewById(R.id.wind_direction_tv);
    //imgView = (ImageView) findViewById(R.id.condIcon);


    task = new  JSONWeatherTask();
    task.execute(new String[]{location});


    spinner = (Spinner) findViewById(R.id.location_spin);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,
            android.R.layout.simple_spinner_item, paths);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(this);

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}



public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {

    switch (position) {
        case 0:
            // Whatever you want to happen when the first item gets selected
            break;
        case 1:
            // Whatever you want to happen when the second item gets selected
            location = "q=plymouth,ms";
            break;

        case 2:
            // Whatever you want to happen when the third item gets selected
            location = "q=olveston,ms";

        break;

        case 3:
            // Whatever you want to happen when the fourth item gets selected
            location = "q=woodlands,ms";
            break;

        case 4:
            // Whatever you want to happen when the fifth item gets selected
            location = "q=cheapend,ms";
            break;

        case 5:
            // Whatever you want to happen when the sixth item gets selected
            location = "q=brades,ms";
            break;

        case 6:
            // Whatever you want to happen when the seventh item gets selected
            location = "q=blackghautbottom,ms";
            break;


        case 7:
            // Whatever you want to happen when the eighth item gets selected
            location = "q=geralds,ms";
            break;


    }
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public void onStart() {
    super.onStart();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client.connect();
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW, // TODO: choose an action type.
            "Main Page", // TODO: Define a title for the content shown.
            // TODO: If you have web page content that matches this app activity's content,
            // make sure this auto-generated web page URL is correct.
            // Otherwise, set the URL to null.
            Uri.parse("http://host/path"),
            // TODO: Make sure this auto-generated app URL is correct.
            Uri.parse("android-app://com.example.android.stratosphere/http/host/path")
    );
    AppIndex.AppIndexApi.start(client, viewAction);
}

@Override
public void onStop() {
    super.onStop();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW, // TODO: choose an action type.
            "Main Page", // TODO: Define a title for the content shown.
            // TODO: If you have web page content that matches this app activity's content,
            // make sure this auto-generated web page URL is correct.
            // Otherwise, set the URL to null.
            Uri.parse("http://host/path"),
            // TODO: Make sure this auto-generated app URL is correct.
            Uri.parse("android-app://com.example.android.stratosphere/http/host/path")
    );
    AppIndex.AppIndexApi.end(client, viewAction);
    client.disconnect();
}


private class JSONWeatherTask extends AsyncTask<String, Void, Weather> {

    @Override
    protected Weather doInBackground(String... params) {
        Weather weather = new Weather();
        String data = ((new WeatherHttpClient()).getWeatherData(params[0]));
        //String data = ((new WeatherHttpClient()).getWeatherData(location));
        Log.e("beg", data);
        try {
            Log.e("try", "before weather called");
            weather = JSONWeatherParser.getWeather(data);

            Log.e("test2", "doesThisWork");

            // Let's retrieve the icon
            weather.iconData = ((new WeatherHttpClient()).getImage(weather.currentCondition.getIcon()));

        } catch (JSONException e) {
            Log.e("test3", "catchTest");
            e.printStackTrace();
        }


        // Log.e( "pressure","" + weather.currentCondition.getPressure() + " hPa");
        //      Log.e("city", "" + weather.location.getCity()+"");


        return weather;

    }


    @Override
    protected void onPostExecute(Weather weather) {
        super.onPostExecute(weather);

        //     if (weather.iconData != null && weather.iconData.length > 0) {
        //         Bitmap img = BitmapFactory.decodeByteArray(weather.iconData, 0, weather.iconData.length);
        //         imgView.setImageBitmap(img);
        //   }

        //cityText = (TextView) findViewById(R.id.cityText);
        //cityText.setText("Montserrat");


        if (weather.location.getCity() == null && weather.location.getCountry() == null) {
            Log.e("getCity", "yes");
        } else {
            Log.e("getCity", weather.location.getCity());
            Log.e("getCountry", weather.location.getCountry());
            cityText.setText(weather.location.getCity() + "," + weather.location.getCountry());
            //cityText.setText("Place");
        }

        if (weather.currentCondition.getCondition() == null && weather.currentCondition.getDescr() == null) {
            Log.e("getCondition", "yes");
        } else {
            Log.e("getDescr", weather.currentCondition.getDescr());
            Log.e("getCondition", weather.currentCondition.getCondition());
            condDescr.setText(weather.currentCondition.getCondition() + "(" + weather.currentCondition.getDescr() + ")");
        }


        temp.setText("" + Math.round((weather.temperature.getTemp() - 273.15)) + "°C");


        hum.setText("" + weather.currentCondition.getHumidity() + "%");


        press.setText("" + weather.currentCondition.getPressure() + " hPa");


        windSpeed.setText("" + weather.wind.getSpeed() + " mps");


        windDeg.setText("" + weather.wind.getDeg() + "°");



    }

}
}

我还是初学者,所以请理解我的代码是否有一个简单的错误。 我不知道为什么但是自从我最近更新了android studio以来这种情况一直在发生。

谢谢

1 个答案:

答案 0 :(得分:0)

Caused by: java.lang.OutOfMemoryError: Failed to allocate a 155750412 byte allocation with 2425818 free bytes and 89MB until OOM

您正在尝试加载大于150MB的图片。这相当于一侧12480像素的图像。这太大了。这似乎是与LinearLayout相关联的资源,可能是通过android:background属性。

所以,你需要:

  1. 确定这是什么形象

  2. 如果您将该图片放入res/drawable/,可能会将其移至res/drawable-nodpi/

  3. 如果图像确实很大,或者距离它很近,请降低图像的分辨率