Android应用程序在模拟器上工作但不在手机上

时间:2010-12-14 18:20:42

标签: android listview

我有我开发的这个应用程序,它在模拟器上运行良好,没有任何错误。但是当我尝试在手机上运行同样的测试时,应用程序崩溃说明filenotfoundexception。它说文件/res/drawable/divider_horizo​​ntal.9.png丢失了。但实际上,我从未通过我的代码引用该文件。 我相信它的系统/ os文件不可用。我有一个自定义列表视图,我猜它是那里的分隔符... 有人可以建议这里有什么问题。我相信这是一个类似的问题在这里讨论..但我无法理解它

http://code.google.com/p/transdroid/issues/detail?id=14

listview.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:gravity="left|center"
    android:layout_width="wrap_content" android:paddingBottom="5px"
    android:paddingTop="5px" android:paddingLeft="5px" >
    <ImageView android:id="@+id/linkImage" android:layout_width="wrap_content"
        android:layout_height="fill_parent" android:layout_marginRight="6dip"
        android:src="@drawable/icon" />
    <LinearLayout android:orientation="vertical"
        android:layout_width="0dip" android:layout_weight="1"
        android:layout_height="fill_parent">
        <TextView android:id="@+id/firstLineView"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:gravity="center" android:textColor="#FFFF00" android:text="first line title"></TextView>

        <TextView android:id="@+id/secondLineView"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="second line title" android:layout_marginLeft="10px" android:gravity="center"
            android:textColor="#0099CC"></TextView>

    </LinearLayout>
</LinearLayout>

调用listview.xml的主要xml文件

<?xml version="1.0" encoding="UTF-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">

    <LinearLayout android:orientation="vertical"
        android:layout_width="fill_parent" android:layout_height="fill_parent">
        <LinearLayout android:orientation="horizontal"
            android:layout_width="fill_parent" android:layout_height="40px">
            <Button android:id="@+id/todayButton" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:text="Today"
                android:textSize="12sp" android:gravity="center"
                android:layout_weight="1" />
            <Button android:id="@+id/tomorrowButton" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:text="Tomorrow"
                android:textSize="12sp" android:layout_weight="1" />

            <Button android:id="@+id/WeekButton" android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:text="Future"
                android:textSize="12sp" android:layout_weight="1" />


        </LinearLayout>
        <LinearLayout android:id="@+id/listLayout"
            android:orientation="vertical" android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <ListView android:id="@+id/ListView01" android:layout_width="fill_parent"
                android:layout_height="fill_parent" />
            <TextView android:id="@id/android:empty"
                android:layout_width="fill_parent" android:layout_height="fill_parent"
                android:text="No Results" />
        </LinearLayout>
    </LinearLayout>
</FrameLayout>

并且代码是

 private class EfficientAdapter extends BaseAdapter{
        private LayoutInflater mInflater;

        private String eventTitleArray[];


private String eventDateArray[];
    private String eventImageLinkArray[];


    public EfficientAdapter(Context context,String[] eventTitleArray,String[] eventDateArray, String[] eventImageLinkArray){
        mInflater = LayoutInflater.from(context);

        this.eventDateArray=eventDateArray;
        this.eventTitleArray=eventTitleArray;
        this.eventImageLinkArray =eventImageLinkArray;

    }
    public int getCount(){
        //return XmlParser.todayEvents.size()-1;
        return this.eventDateArray.length;
    }
    public Object getItem(int position){
        return position;
    }
    public long getItemId(int position){
        return position;
    }
    public View getView(int position, View convertView, ViewGroup parent){
        ViewHolder holder;
        if(convertView == null){
            convertView = mInflater.inflate(R.layout.listview,null);
        holder = new ViewHolder();
        holder.firstLine = (TextView) convertView.findViewById(R.id.firstLineView);
        holder.secondLine = (TextView) convertView.findViewById(R.id.secondLineView);
        holder.imageView = (ImageView) convertView.findViewById(R.id.linkImage);
        //holder.checkbox = (CheckBox) convertView.findViewById(R.id.star);
        holder.firstLine.setFocusable(false);
        holder.secondLine.setFocusable(false);
        holder.imageView.setFocusable(false);
        //holder.checkbox.setFocusable(false);
        convertView.setTag(holder);
    }else{
        holder = (ViewHolder) convertView.getTag();
    }
    Log.i(tag, "Creating the list");
    holder.firstLine.setText(this.eventTitleArray[position]);
    holder.secondLine.setText(this.eventDateArray[position]);

    Bitmap bitmap;
    try {
        bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://edu/images/heinz7.jpg").getContent());
    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (Exception e1) {
        // TODO Auto-generated catch block
        bitmap = BitmapFactory.decodeFile("assets/heinz7.jpg");//decodeFile(getResources().getAssets().open("icon.png"));
        e1.printStackTrace();
    }
    try {
        try{
            bitmap = BitmapFactory.decodeStream((InputStream)new URL(this.eventImageLinkArray[position]).getContent());}
        catch(Exception e){
            bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://eventur.sis.pitt.edu/images/heinz7.jpg").getContent());
        }

        int width = 0;
        int height =0;
        int newWidth = 50;
        int newHeight = 40;

        try{
            width = bitmap.getWidth();
            height = bitmap.getHeight();
        }
        catch(Exception e){
            width = 50;
            height = 40;
        }
        float scaleWidth = ((float)newWidth)/width;
        float scaleHeight = ((float)newHeight)/height;
        Matrix mat = new Matrix();
        mat.postScale(scaleWidth, scaleHeight);

        try{
            Bitmap newBitmap = Bitmap.createBitmap(bitmap,0,0,width,height,mat,true);
            BitmapDrawable bmd = new BitmapDrawable(newBitmap);
            holder.imageView.setImageDrawable(bmd);
            holder.imageView.setScaleType(ScaleType.CENTER);
        }
        catch(Exception e){

        }

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



    return convertView;
}
class ViewHolder{
    TextView firstLine;
    TextView secondLine;
    ImageView imageView;
    //CheckBox checkbox;

}

堆栈跟踪

12-12 22:55:25.022: ERROR/AndroidRuntime(11069): Uncaught handler: thread main exiting due to uncaught exception
12-12 22:55:25.212: ERROR/AndroidRuntime(11069): android.view.InflateException: Binary XML file line #6: Error inflating class java.lang.reflect.Constructor
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.createView(LayoutInflater.java:512)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at com.eventur.MainActivity$EfficientAdapter.getView(MainActivity.java:566)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.AbsListView.obtainView(AbsListView.java:1274)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.ListView.makeAndAddView(ListView.java:1661)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.ListView.fillDown(ListView.java:610)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.ListView.fillFromTop(ListView.java:673)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.ListView.layoutChildren(ListView.java:1519)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.View.layout(View.java:6156)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.ViewRoot.performTraversals(ViewRoot.java:950)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1529)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.os.Looper.loop(Looper.java:123)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.app.ActivityThread.main(ActivityThread.java:3977)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at java.lang.reflect.Method.invokeNative(Native Method)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at java.lang.reflect.Method.invoke(Method.java:521)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at dalvik.system.NativeStart.main(Native Method)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069): Caused by: java.lang.reflect.InvocationTargetException
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.ImageView.<init>(ImageView.java:128)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at java.lang.reflect.Constructor.constructNative(Native Method)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.view.LayoutInflater.createView(LayoutInflater.java:499)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     ... 42 more
12-12 22:55:25.212: ERROR/AndroidRuntime(11069): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/divider_horizontal_dark.9.png from drawable resource ID #0x7f020001
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.content.res.Resources.loadDrawable(Resources.java:1643)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.widget.ImageView.<init>(ImageView.java:138)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     ... 46 more
12-12 22:55:25.212: ERROR/AndroidRuntime(11069): Caused by: java.io.FileNotFoundException: res/drawable/divider_horizontal_dark.9.png
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.content.res.AssetManager.openNonAssetNative(Native Method)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.content.res.AssetManager.openNonAsset(AssetManager.java:417)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     at android.content.res.Resources.loadDrawable(Resources.java:1636)
12-12 22:55:25.212: ERROR/AndroidRuntime(11069):     ... 48 more

3 个答案:

答案 0 :(得分:1)

通货膨胀期间出现问题。 Inflating没有最好的错误报告/恢复,因此当它遇到问题时会抛出奇怪的神秘消息。我相信问题出在listview.xml中,问题很可能是你添加到其中一个元素的xml属性之一。第6行我认为是指第一个或第二个Button元素。当它进行编译时,似乎每个元素只有一行。我首先要删除程序运行时不需要的所有标记,例如gravity和layout_weight。

抱歉,我无法提供更具体的答案;当你遇到像这样的通胀错误时,这是​​一个在黑暗中探索直到你发现错误的问题。

至于为什么在手机而不是仿真器上发生这种情况,很可能只是两者之间的操作系统差异(操作系统版本,正在使用的UI,制造商所做的其他更改等)。在模拟器上进行测试可以让您了解程序在手机上的外观和运行方式,但不能保证。

感谢提供如此多的信息,它使故障排除变得更加容易;-)如果我的建议有效,或者您需要更多信息,请告诉我。

答案 1 :(得分:0)

我尝试使用自己的资源文件,其扩展名类似于“/res/drawable/divider_horizo​​ntal.9.png”E.G. “.9.png”据说这种类型的文件用于Android,以便知道图像具有可以调整的特殊边界。我尝试使用这种类型的文件扩展名创建自己的按钮,我也遇到了错误。我没有“.9”扩展名替换了我的文件,我不再有任何问题。当您引用该文件时,您永远不应该拥有该扩展名。

答案 2 :(得分:0)