java - 应用程序在设备上运行但在模拟器上崩溃?

标签 java android eclipse android-emulator

我正在尝试测试我在 Eclipse 中构建的应用程序。当我在运行 Android 2.3.4 的 HTC Droid Incredible 设备上运行它时,它运行良好。但是,当我在模拟器(例如 Nexus 7 或 10.1 WXGA 平板电脑)上运行它时,它会崩溃。我的目标 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);
}

}

日志猫:

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

最佳答案

大多数时候出现此问题是因为 xml 文件错误。

  • 请确保您只有一个 main.xml 布局文件。
  • 如果您想要多个布局文件(以支持不同的屏幕尺寸),请确保它们在 View ID/类型/计数方面匹配

关于java - 应用程序在设备上运行但在模拟器上崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14713846/

相关文章:

java - 如何限制 Eclipse 中的搜索匹配以过滤掉评论中的结果?

java - Netbeans IDE 中企业应用程序项目和 Web 项目应用程序之间的区别

java - 如何保持 Android 应用程序始终运行(Service 和 BroadcastReceiver)?

java - OpenGL ES 纹理无法绘制

java - Eclipse:父 pom 中的自定义属性的子 pom 中的 Maven 构建错误

java - 如何修复 Eclipse View 中布局的位置

java - mySQL 连接无法工作

java - 在 Java 中使用 IE/Chrome HTML-Renderer 或使用 JavaScript 存储文件

android - 如何将react-native应用程序分享给客户以供他们测试

java - 在 Android 上用 Java 或 C/C++ 解码 Airplay 数据包