簡體   English   中英

Android應用程式可在模擬器上運作,但無法在手機上運作

[英]android app working on simulator but not on phone

我有我開發的這個應用程序,它可以在模擬器上很好地運行,並且沒有任何錯誤。 但是當我嘗試在手機上運行相同的文件進行測試時,應用程序崩潰,並指出filenotfoundexception。 表示文件/res/drawable/divider_horizo​​ntal.9.png丟失。 但實際上,我從未通過代碼引用過該文件。 我認為其系統/操作系統文件不可用。 我有一個自定義列表視圖,我猜那里是分隔線...有人可以在這里提出問題嗎。 我認為這是這里討論的類似問題。.但是我無法理解

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

通貨膨脹期間發生問題。 膨脹並沒有最好的錯誤報告/恢復方法,因此當它遇到問題時,它會拋出像這樣的奇怪的隱秘消息。 我確信問題出在listview.xml中,問題很可能是您已添加到元素之一的xml屬性之一。 我認為第6行是指第一個或第二個Button元素。 進行編譯時,似乎每個元素僅分配一行。 我將首先取出所有不需要立即運行的標簽,例如gravity和layout_weight。

抱歉,我無法提供更具體的答案; 當您遇到這樣的通貨膨脹錯誤時,就需要在黑暗中進行探測,直到找到問題所在。

至於為什么這是在電話上而不是模擬器上發生的原因,很可能兩者之間存在操作系統差異(操作系統版本,使用的UI,制造商進行的其他更改等)。 在模擬器上進行測試可以使您很好地了解程序在手機上的外觀和運行方式,但不能保證。

提供這么多信息的榮譽,使故障排除更加容易;-)讓我知道我的建議是否有效,或者您是否需要更多信息。

我嘗試使用具有類似擴展名“ /res/drawable/divider_horizo​​ntal.9.png”例如“ EG” .9.png的自己的資源文件。據解釋,這種類型的文件用於Android,以了解圖像具有特殊邊界可以調整的 我嘗試使用這種類型的文件擴展名創建自己的按鈕,但同時也遇到了錯誤。 我替換了沒有“ .9”擴展名的文件,並且不再遇到任何問題。 當您引用文件時,您永遠不應具有擴展名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM