2016-11-10 132 views
-1

我不断收到这个错误,当我尝试推出我的应用程序致命异常主要在我的应用程序

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以来,这种情况一直在发生。

谢谢

+0

您的xml数据太大而无法处理,因为其中有内存异常 – developer

+0

检查您的布局,xml文件,第2行。尝试将图像放在可绘制的hdpi文件夹中,创建一个drawable-hdpi文件夹,并在其中放置drawable。 – HaroldSer

回答

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. 如果图像确实是大或靠近它的任何地方降低图像的分辨率

相关问题