2013-02-05 198 views
1

我想測試一下我在Eclipse中構建的應用程序。當我在Android 2.3.4上運行的HTC Droid Incredible設備上運行它時,它工作正常。但是,當我在模擬器上運行它時,例如Nexus 7或10.1 WXGA Tablet,它會崩潰。我的目標SDK版本設置爲17,最小版本爲8.爲什麼應用程序在設備上工作,但不是模擬器?應用程序在設備上運行,但在模擬器上崩潰?

代碼和logcat在這裏。

代碼:

package com.carouseldemo.main; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.Menu; 

import android.view.MenuInflater; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.carouseldemo.controls.Carousel; 
import com.carouseldemo.controls.CarouselAdapter; 
import com.carouseldemo.controls.CarouselAdapter.AdapterContextMenuInfo; 
import com.carouseldemo.controls.CarouselAdapter.OnItemClickListener; 
import com.carouseldemo.controls.CarouselAdapter.OnItemSelectedListener; 
import com.carouseldemo.controls.CarouselItem; 

public class MainActivity extends Activity { 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
super.onCreateOptionsMenu(menu); 
MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.testmenu1, menu); 
// your code... 
return true;} // true if you want the menu to be displayed; false otherwise 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    // Just prepare ourself for unexpected arguments... 

    if (menuInfo == null) { 
     return; 
    } 
    if (!(menuInfo instanceof AdapterContextMenuInfo)) { 
     return; 
    } 


    AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfo; 

    switch (mi.position) { 
    case 0: 

     menu.add("Product 1"); 

     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     break; 
    case 1: 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     break; 
    case 2: 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     break; 
    case 3: 
     menu.add("mouse menu"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     break; 
    case 4: 
     menu.add("panda menu"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     break; 
    case 5: 
     menu.add("rabbit menu"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     menu.add("Product 1"); 
     break; 
    default: 
     break; 
    } 
    super.onCreateContextMenu(menu, v, menuInfo); 
} 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Carousel carousel = (Carousel) findViewById(R.id.carousel); 
    carousel.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(CarouselAdapter<?> parent, View view, 
       int position, long id) { 
      CarouselItem item = (CarouselItem) parent.getChildAt(position); 

      // HERE: Force context menu 
      carousel.showContextMenuForChild(item); 
      Toast.makeText(
        MainActivity.this, 
        String.format("%s has been clicked", 
          ((CarouselItem) parent.getChildAt(position)) 
            .getName()), Toast.LENGTH_SHORT).show(); 







     } 

     @Override 
     public void onCreateContextMenu(ContextMenu menu, View v, 
       ContextMenuInfo menuInfo) { 

      // TODO Auto-generated method stub 





     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // TODO Auto-generated method stub 
      return false; 
     }}); 



    carousel.setOnItemSelectedListener(new OnItemSelectedListener() { 

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

      final TextView txt = (TextView) (findViewById(R.id.selected_item)); 

      switch (position) { 
      case 0: 
       txt.setText("The cat (Felis catus), also known as the domestic cat or housecat to distinguish it from other felids and felines, is a small, usually furry, domesticated, carnivorous mammal that is valued by humans for its companionship and for its ability to hunt vermin and household pests. Cats have been associated with humans for at least 9,500 years, and are currently the most popular pet in the world. Owing to their close association with humans, cats are now found almost everywhere in the world."); 
       break; 
      case 1: 
       txt.setText("The hippopotamus (Hippopotamus amphibius), or hippo, from the ancient Greek for \"river horse\"(), is a large, mostly herbivorous mammal in sub-Saharan Africa, and one of only two extant species in the family Hippopotamidae (the other is the Pygmy Hippopotamus.) After the elephant, the hippopotamus is the third largest land mammal and the heaviest extant artiodactyl."); 
       break; 
      case 2: 
       txt.setText("A monkey is a primate, either an Old World monkey or a New World monkey. There are about 260 known living species of monkey. Many are arboreal, although there are species that live primarily on the ground, such as baboons. Monkeys are generally considered to be intelligent. Unlike apes, monkeys usually have tails. Tailless monkeys may be called \"apes\", incorrectly according to modern usage; thus the tailless Barbary macaque is called the \"Barbary ape\"."); 
       break; 
      case 3: 
       txt.setText("A mouse (plural: mice) is a small mammal belonging to the order of rodents. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are also common. This rodent is eaten by large birds such as hawks and eagles. They are known to invade homes for food and occasionally shelter."); 
       break; 
      case 4: 
       txt.setText("The giant panda, or panda (Ailuropoda melanoleuca, literally meaning \"black and white cat-foot\") is a bear native to central-western and south western China.[4] It is easily recognized by its large, distinctive black patches around the eyes, over the ears, and across its round body. Though it belongs to the order Carnivora, the panda's diet is 99% bamboo."); 
       break; 
      case 5: 
       txt.setText("Rabbits (or, colloquially, bunnies) are small mammals in the family Leporidae of the order Lagomorpha, found in several parts of the world. There are eight different genera in the family classified as rabbits, including the European rabbit (Oryctolagus cuniculus), cottontail rabbits (genus Sylvilagus; 13 species), and the Amami rabbit (Pentalagus furnessi, an endangered species on Amami, Japan)"); 

       break; 
      } 

     } 

     public void onNothingSelected(CarouselAdapter<?> parent) { 
     } 

    }); 

    registerForContextMenu(carousel); 
} 

} 

的logcat:

2-05 17:52:31.218: E/AndroidRuntime(1622): FATAL EXCEPTION: main 
02-05 17:52:31.218: E/AndroidRuntime(1622): java.lang.RuntimeException: Unable to start activity   ComponentInfo{com.carouseldemo.main/com.carouseldemo.main.MainActivity}:  android.view.InflateException: Binary XML file line #31: Error inflating class com.carouseldemo.controls.Carousel 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.os.Looper.loop(Looper.java:137) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at dalvik.system.NativeStart.main(Native Method) 
02-05 17:52:31.218: E/AndroidRuntime(1622): Caused by: android.view.InflateException: Binary XML file line #31: Error inflating class com.carouseldemo.controls.Carousel 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
02-05 17:52:31.218: E/AndroidRuntime(1622): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.Activity.setContentView(Activity.java:1881) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.carouseldemo.main.MainActivity.onCreate(MainActivity.java:110) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.Activity.performCreate(Activity.java:5104) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  ... 11 more 
02-05 17:52:31.218: E/AndroidRuntime(1622): Caused by: java.lang.reflect.InvocationTargetException 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at java.lang.reflect.Constructor.constructNative(Native Method) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  ... 22 more 
02-05 17:52:31.218: E/AndroidRuntime(1622): Caused by: java.lang.OutOfMemoryError 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.content.res.Resources.loadDrawable(Resources.java:1965) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.carouseldemo.controls.Carousel$ImageAdapter.SetImages(Carousel.java:778) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.carouseldemo.controls.Carousel.<init>(Carousel.java:253) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  at com.carouseldemo.controls.Carousel.<init>(Carousel.java:204) 
02-05 17:52:31.218: E/AndroidRuntime(1622):  ... 25 more 
+5

看來仿真器內存用完:'所致:java.lang.OutOfMemoryError' – Sam

+0

我能做些什麼來解決這個問題?感謝您的迴應。 –

+1

我不知道Carousel是否是您在自己的代碼中使用的第三方庫,但看起來您正嘗試加載太多太大的圖像和/或圖像。嘗試使用更少或更低質量的圖像。 – Sam

回答

0

大多數的這個問題,因爲一切發生的錯誤的XML文件的時間。

  • 請確保您只有一個main.xml佈局文件。
  • 如果你想有多個佈局文件(支持不同的屏幕尺寸),確保它們匹配,interms觀ID /類型/計數
相關問題