einfach app läuft unter Galaxy Ace aber nicht auf S4

  • 18 Antworten
  • Letztes Antwortdatum
T

ts7343

Neues Mitglied
0
Hallo,

ich habe gerade eine einfache app programmiert mit SDK versionen:
min 8
max 18

die App enthält nur zwei simple Activities mit Bildern und Buttons,

diese App laeuft auf einem Galaxy Ace mit Android 2.3.6
aber auf dem neuen S4 mit Android 4.1.x sieht man die Bilder nicht
und die App verabschiedet sich beim Wechsel der Activity,

hat jemand eine Idee woran das liegen kann?

Vielen Dank
 
Dass s4 hat aber min 4.2


Gesendet von meinem Nexus 4 mit der Android-Hilfe.de App
 
Hallo,

habe den Thread mal in das App-Entwicklungs-Forum verschoben.

Grüße,
Peer
 
Sieh dir doch einfach die Fehlermeldung an bzw poste sie hier. Hellseher sind hier wenige unterwegs.
 
Das Problem ist, dass keine Fehlermeldung kommt.

Die App zeigt in der MainActivity eine TextView, ein Image und einen Button,

Unter dem S4 wird schon das Image nicht gezeigt,
sobald man auf den Button klickt um in die zweite Activity zu wechseln
(wo auch ein Image angezeigt wird) hängt sich das S4 auf und nach 30 sek
steht nur da, dass die Anwendung beendet wird.

Noch einfachere Apps z.B. nur mit TextView, Button, Toasts nimmt auch das S4
ohne Probleme, aber sobald Bilder dazukommen ...

gibt es eine Moeglichkeit mehr Fehlermeldungen aus dem S4 herauszukitzeln
die ich euch dann zukommen lassen koennte?



Vielen Dank
 
Ja die Logcat.. oder wie hast du deine App entwickelt? oO

lg. Dagobert
 
Wir brauchen Logcat und Code :D
 
Hab mich mal ueber logcat schlau gemacht und gelesen, dass man
ihn ab Jelly Bean nicht mehr lesen kann, Mist!

Und adb findet das Device nicht auf dem Rechner, obwohl ich gestern
eine Menge probiert hab.

Also bliebe echt nur der Code, vielleicht seht ihr ja etwas,
ich stell ihn mal zusammen. Reicht die MainActivity.java
activity_main.xml und strings.xml ?
Oder gibt es unter Eclipse eine Moeglichkeit ein Gesamtpaket zu schnüren?

Aber da ist ja auch ein jpg bei, also wird es binär ...
 
Du entwickelst mit Eclipse aber ohne adb? Wie kriegst du dein Programm dann bitte aufs Handy?

Um on-device an das Logcat zu kommen, muss man bei JB nur rooten.
 
naja, ich entwickle mit eclipse und schiebe dann den apk file
welches in bin-directory steht auf die handykarte und installier
den apk file dort, nachdem ich "unbekannte quellen" aktiviert habe.

aber wenn ich adb mit cmd.exe starte und z.b.
adb devices
eingebe, bekomme ich keine devices angezeigt, obwohl das handy mit usb
verbunden ist, auch das usb-debugging auf dem handy ist an ...,

das S4, wo das Programm nicht funktionert ist leider nicht meins, somit
kann ich das nicht rooten,

bis gleich (dann mit code)
 
sehr umständlich.

such mal nach treiber für dein gerät.
 
Hier der Code.

Wie gesagt, ist nix besonderes,

kann das jemand auf seinem s4 testen?
als bild fuer die activity2 einfach irgenein jpg in den:
drawable_hdpi
folder packen.


MainActivity:
Code:
package org.intracode.lp_test_001;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    private Button button_01;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button_01 = (Button) findViewById(R.id.id_button);
        button_01.setOnClickListener(this);                    
    }
        
    @Override
    public void onClick(View v) {
        final Context context = this;
        if (v == button_01) {
            Intent intent = new Intent(context, MainActivity2.class );
            startActivity(intent);
        }    
    }
}
MainActivity2.java:

Code:
package org.intracode.lp_test_001;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

}
activity_main.xml:

Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/id_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="72dp"
        android:text="@string/str_textview" />

    <Button
        android:id="@+id/id_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/id_textview"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="36dp"
        android:text="@string/str_button" />

</RelativeLayout>
activity_main2:

Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/hello_world"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity2" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/gritt_klettern" />

</RelativeLayout>
strings.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">lp_test_001</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="str_textview">Welcome to this app ...</string>
    <string name="str_button">Button</string>
    <string name="title_activity_main_activity2">MainActivity2</string>
</resources>


Der ursprüngliche Beitrag von 15:09 Uhr wurde um 15:11 Uhr ergänzt:

bzgl der treiber hab ich gestern diesen installliert:

SAMSUNG_Android_USB_Composite_Device_Driver_5.28.2.1.zip

welchen ich bei chip.de runtergeladen hatte,

hat aber leider auch nicht geholfen, er erkennt leider das Geraet nicht.
 
Hallo,

inzwischen hab ich mit adb es geschafft das problem besser zu sehen:

D/skia (32523): --- allocation failed for scaled bitmap
D/AndroidRuntime(32523): Shutting down VM

und es läuft darauf hinaus mit BitmapFactory zu arbeiten,

ich skaliere nun das jpg aus dem res\drawable-hdpi folder runter, aber leider sehe ich
nun nichts mehr ausser einem weissen Hintergrund,

kann mal jemand über diesen Code schauen und mir einen Tipp geben, was ich
ändern sollte?

das Bild ist im xml file so definniert:

Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:contentDescription="@string/hello_world"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity1" >
    
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:contentDescription="@string/hello_world"
        android:src="@drawable/opa_bernd_01"
        android:visibility="invisible" />  
</RelativeLayout>
und die activity sieht so aus:

Code:
package org.intracode.opa_bernd_app;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class MainActivity1 extends Activity {

    ImageView image;
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity1);
        image = (ImageView) findViewById(R.id.imageView1);
        image.setVisibility(View.VISIBLE);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        Bitmap bMap =  BitmapFactory.decodeResource(getResources(), R.id.imageView1, options);
        image.setImageBitmap(bMap);
        int pic_counter = 0;
        Intent intent = getIntent();        
        pic_counter = intent.getIntExtra("KeyToAccessData", pic_counter);        
        Toast.makeText(this," pic_counter: " + pic_counter + " ",Toast.LENGTH_SHORT).show();
    }
}
wenn ich mir einen Toast fuer bMap ausgebe, bekomme ich zurück: null
also "could not be decoded", aber warum nicht?

oder muss ich mit inSampleSize explizit etwas setzen um runter zu skalieren?
 
Zuletzt bearbeitet:
Code:
options.inJustDecodeBounds = true;

Wenn du ein Bild mit dieser Option lädst, dann werden nur die Maße des Bildes, nicht aber der Inhalt geladen. Mach das weg, dann sollte es doch funktionieren.
 
Vielen Dank, auf dem emulator klappt es nun, aber auf dem S4 bekomme ich leider nun einen "Shutting down VM" obwohl ich mit BitmapFactory decoded habe, der logcat im verbose modus:

Code:
[ 12-04 21:08:26.378 32458:32458 I/dalvikvm ]  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
[ 12-04 21:08:26.378 32458:32458 I/dalvikvm ]  at dalvik.system.NativeStart.main(Native Method)
[ 12-04 21:08:26.378 32458:32458 I/dalvikvm ]
[ 12-04 21:08:26.378 32458:32458 D/skia     ] --- allocation failed for scaled bitmap
[ 12-04 21:08:26.378 32458:32458 D/AndroidRuntime ] Shutting down VM
[ 12-04 21:08:26.378 32458:32458 W/dalvikvm ] threadid=1: thread exiting with uncaught exception (group=0x41ea3ac8)
[ 12-04 21:08:26.378 32458:32458 E/AndroidRuntime ] FATAL EXCEPTION: main
java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:472)
    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:502)
    at org.intracode.opa_bernd_app.MainActivity.onCreate(MainActivity.java:43)
    at android.app.Activity.performCreate(Activity.java:5250)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
    at android.app.ActivityThread.access$700(ActivityThread.java:151)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5293)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
    at dalvik.system.NativeStart.main(Native Method)
[ 12-04 21:08:26.388   212:  376 D/qdmemalloc ] ion: Mapped buffer base:0x476bf000 size:1835008 fd:49
[ 12-04 21:08:26.388   212:  376 D/qdmemalloc ] ion: Mapped buffer base:0x40017000 size:4096 fd:50
[ 12-04 21:08:26.398   212: 1684 D/qdmemalloc ] ion: unmap_buffer base:0x0 size:1835008 offset:0 fd:49
[ 12-04 21:08:26.398   212: 1684 D/qdmemalloc ] ion: unmap_buffer base:0x0 size:4096 offset:0 fd:50
[ 12-04 21:08:26.798  8551: 9437 D/dalvikvm ] GC_FOR_ALLOC freed 4712K, 7% free 191033K/203468K, paused 395ms, total 395ms
[ 12-04 21:08:26.798  8551: 8598 D/CrashAnrDetector ] processName: org.intracode.opa_bernd_app
[ 12-04 21:08:26.798  8551: 8598 D/CrashAnrDetector ] storeEvent : org.intracode.opa_bernd_app data_app_crash
[ 12-04 21:08:26.798  8551: 9437 W/ContextImpl ] Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1337 com.android.server.am.ActivityStack.startPausingLocked:1315 com.android.server.am.ActivityStack.finishActivityLocked:5712 com.android.server.am.ActivityStack.finishActivityLocked:5626 com.android.server.am.ActivityManagerService.handleAppCrashLocked:9457 
[ 12-04 21:08:26.798  8551: 8598 V/SmartFaceService - 3rd party pause ] onReceive [android.intent.action.ACTIVITY_STATE/org.intracode.opa_bernd_app/pause]



ist da etwas falsch gesetzt in der main activity, dass das decoding gar nicht
greift und er normal versucht eine imageview zu machen,
dort bekam ich nämlich früher auch diese memory probleme,
ich dachte dies wird mit bitmapfactory besser:

Code:
package org.intracode.opa_bernd_app;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;


public class MainActivity extends Activity implements OnClickListener {
    
    ImageView image;
    int pic_counter = 0;
    private Button button_01;
    
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);                        
        button_01 = (Button) findViewById(R.id.id_button_01);
        button_01.setOnClickListener(this);            
        image = (ImageView) findViewById(R.id.imageView1);
        Bitmap bMap =  BitmapFactory.decodeResource(getResources(), R.drawable.opa_bernd_alle_view);
        image.setImageBitmap(bMap);
    }
    
    @Override
    public void onClick(View v) {
        if (v==button_01) {
            pic_counter = 1;
        }
        Intent int_pic_01 = new Intent(MainActivity.this, MainActivity1.class );
        int_pic_01.putExtra("KeyToAccessData", pic_counter);
        startActivity(int_pic_01);                
        }
    }
}


hat jemand noch einen tipp für mich?

greift das bitmapfactory decoding wirklich?

muss ich evtl down-scalen?

vielen dank
 
Welche Auflösung hat denn diese Bilddatei?
Kann mir nur vorstellen, dass diese viel zu groß ist.
 
Die Bilddatei ist ein jpg,
size: 928 kb
2732 x 1860 Pixel, resolution 72 dpi (horizontal und vertikal)
bit depth: 24

ich dachte das spielt keine Rolle, weil er es sowieso auf ein gesundes Maß
skaliert?

Welche Größen würdest du empfehlen?
 
Skalieren muss man schon selbst machen, so wird einfach das ganze Bild geladen. Du hast das Bild also im hdpi-Ordner gespeichert, das heißt um auf xxhdpi zu kommen, wird auf das doppelte hochskaliert.

Das ergibt dann nicht 19,3MB sondern 77,2MB. Das ist zu viel.

Schnellste Lösung: Mach das Bild doch einfach in den xxhdpi-Ordner, denn 19MB sollte kein Problem darstellen. Dann wird allerdings für andere Smartphones runterskaliert. Brauchst du das Bild immer in Originalqualität, so gibts dafür den Ordner nodpi.
 

Ähnliche Themen

G
Antworten
0
Aufrufe
132
Gerdchen07
G
G
Antworten
1
Aufrufe
384
Gerdchen07
G
G
Antworten
13
Aufrufe
598
Gerdchen07
G
L
Antworten
2
Aufrufe
554
Lexub
L
migi01
Antworten
26
Aufrufe
1.990
migi01
migi01
Zurück
Oben Unten