2012-03-10 15 views
0

アプリが正常に動作するように問題が発生しています。基本的に私は、いくつかの写真と文字列をユーザーから取得する必要のあるゲームを持っています。私は、メニュー(MenuScreen)を開くスプラッシュスクリーンとして機能するオープニングスクリーン(OpeningScreen)を持っています。そこから、ユーザーはゲームに行くか、現在の写真を表示するアクティビティ(PickScreen)に進むことができます。ユーザーはそのアクティビティに移動し、そこから現在選択している画像の大型バージョンまたはデフォルトの画像(PicOne)を表示する別のアクティビティを開くことができます。ここでは、新しい写真を撮り、現在の文字列を変更するオプションがあります。ほとんどの場合、すべてがうまくいきます。私の問題は、次の場合に発生します。Androidアプリのみが一度だけ動作し、クラッシュする

ユーザーが画像を選択してアプリから後退した後。次回に開くと、PickScreenに戻るか、新しい写真を撮った後に「終了」を押した後に、またPicOneのアクティビティに行くときに閉じることがあります。毎回同じことをするのではなく、それらのポイントの1つでクラッシュするだけです。

3つの文字列名を変更すると、別の問題が発生します。保存を押してPickScreenに戻ると、PicOneに戻るときにアプリがクラッシュしたり、MenuScreenからPickScreenに行くときにアプリが戻ってきてクラッシュしたりする。

これはたくさんのコードを見ていることはわかっていますが、私は多くの時間を見てこのアプリケーションのさまざまな場所からコードを取得していますが、わかりません。私はそこに私より多くの知識を持つ多くの人がいると思うので、私はあなたの助けを求めています。私は、あなたが何らかの仕事をしていることを示すことなく、ただ質問するだけではいられないことを知っています。

アプリが完全に1回動作してから、2回目にさまざまなスポットでクラッシュするのはなぜですか?ちなみに、強制終了後は正常に動作しますが、もう一度一度しか動作しません。なぜ私はストリングスを変更すると、それは強制的に閉じるのでしょうか?

ありがとうございました!

PicOneクラス

public class PicOne extends Activity implements OnClickListener { 
ImageView iv; 
EditText c1, c2, c3; 
Button cam, save; 
Bitmap bit, bmp,other; 
Intent i; 
Uri uriSavedImage; 
String imageFilePath10 = "", name1="", name2="", name3=""; 
final static int cameraData = 0; 
boolean CAMERA; 
int camORgal10 = 0; 
SharedPreferences gameData; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.picone); 
     CAMERA = false; 
     iv = (ImageView)findViewById(R.id.picIV); 
     cam = (Button)findViewById(R.id.camButton); 
     save = (Button)findViewById(R.id.savebut); 
     e1 = (EditText)findViewById(R.id.Enter1); 
     e2 = (EditText)findViewById(R.id.Enter2); 
     e3 = (EditText)findViewById(R.id.Enter3); 

     cam.setOnClickListener(this); 
     save.setOnClickListener(this); 
} 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(v.getId()) 
     { 
     //camera 
     case R.id.camButton: 
      camORgal10 = 1; 
      i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);    
      File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MySpot"); 
      imagesFolder.mkdirs(); // <---- 
      String fileName = "image_1.PNG"; 
      File output = new File(imagesFolder, fileName);    
      uriSavedImage = Uri.fromFile(output);   
      i.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivityForResult(i, cameraData); 
      break; 

     case R.id.savebut: 
      CAMERA = true; 
      name1 = e1.getText().toString(); 
      name2 = e2.getText().toString(); 
      name3 = e3.getText().toString(); 
      SharedPreferences.Editor editor = gameData.edit(); 
      editor.putInt("NUM10CAMGAL", camORgal10); 
      editor.putString("NUM10NAME1", name1); 
      editor.putString("NUM10NAME2", name2); 
      editor.putString("NUM10NAME3", name3); 
      editor.commit(); 
      Intent goPT = new Intent(this, PickScreen.class); 
      goPT.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      goPT.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      finish(); 
      startActivity(goPT);     
      break; 

     } 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if(keyCode == KeyEvent.KEYCODE_BACK) 
     { 
      CAMERA = true; 
      name1 = e1.getText().toString(); 
      name2 = e2.getText().toString(); 
      name3 = e3.getText().toString(); 
      SharedPreferences.Editor editor = gameData.edit(); 
      editor.putInt("NUM10CAMGAL", camORgal10); 
      editor.putString("NUM10NAME1", name1); 
      editor.putString("NUM10NAME2", name2); 
      editor.putString("NUM10NAME3", name3); 
      editor.commit(); 
      Intent goPT = new Intent(this, PickScreen.class); 
      goPT.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      goPT.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      finish(); 
      startActivity(goPT); 

      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, 
      Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == cameraData)  
     {   
      if(resultCode == RESULT_OK && data.hasExtra("data"))   
      {    
        bmp = (Bitmap) data.getExtras().get("data"); 
        iv.setImageBitmap(bmp); 



      }   
      else if (resultCode == RESULT_CANCELED)   
      {    
       Toast.makeText(getApplicationContext(), "Cancelled",Toast.LENGTH_SHORT).show();  
      }  
     } 


     } 



    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 

     super.onPause(); 

    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 


     if(OpeningScreen.isEXIT) 
     { 
      finish(); 
     } 
     gameData = getSharedPreferences(MenuScreen.MYFOLDER, 0); 
     name1 = slotData.getString("NUM10NAME1", "one"); 
     name2 = slotData.getString("NUM10NAME2", "two"); 
     name3 = slotData.getString("NUM10NAME3", "three"); 
     e1.setText(name1); 
     e2.setText(name2); 
     e3.setText(name3); 
     camORgal10 = gameData.getInt("NUM10CAMGAL", 0); 
     if(camORgal10 == 0) 
     { 
      bit = BitmapFactory.decodeResource(getResources(), R.drawable.red); 
     } 
     else if(camORgal10 == 1) 
     { 
      File imgFile = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_1.PNG"); 
      if(imgFile.exists()) 
      { 
       bit = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
      } 
      else 
      { 
       bit = BitmapFactory.decodeResource(getResources(), R.drawable.red); 
      } 
     } 

     else 
     { 
      bit = BitmapFactory.decodeResource(getResources(), R.drawable.red); 
     }   
     iv.setImageBitmap(bit); 
     super.onResume(); 
    } 
} 

OpeningScreen

public class OpeningScreen extends Activity { 
/** Called when the activity is first created. */ 
public static boolean isEXIT = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    isEXIT = false; 
    Thread timer = new Thread(){ 
     public void run(){ 
      try{ 
       sleep(2500); 
      } catch(InterruptedException e){ 

      } finally{ 
       Intent toMenu = new Intent(getApplicationContext(), MenuScreen.class); 
       toMenu.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       //toMenu.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
       finish(); 
       startActivity(toMenu);     
      }    
     } 
    }; 
    timer.start(); 
} 

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    finish(); 
    super.onPause();   
} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    if(isEXIT) 
    { 
     finish(); 
    } 

    super.onResume(); 
}  
} 

MenuScreen

public class MenuScreen extends Activity implements OnClickListener { 
float x,y; 
int camORgal = 0; 
ImageButton play, edit, more; 
Intent i; 
public static String MYFOLDER = "GAMEDATA"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu); 
    play = (ImageButton)findViewById(R.id.IBplay); 
    edit = (ImageButton)findViewById(R.id.IBedit); 
    more = (ImageButton)findViewById(R.id.IBmore); 
    play.setOnClickListener(this); 
    edit.setOnClickListener(this); 
    more.setOnClickListener(this); 
} 

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     OpeningScreen.isEXIT = true; 
     finish(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.IBplay: 
     i = new Intent(getApplicationContext(), TheGame.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     finish(); 
     startActivity(i);   
     break; 
    case R.id.IBedit: 
     i = new Intent(this, PickScreen.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     finish(); 
     startActivity(i);   
     break; 
    case R.id.IBmore: 

     break; 
    } 
} 

} 

PickScreen

public class PickScreen extends Activity implements OnClickListener { 
Button bPic1, bPic2, bPic3; 
ImageView ivpic3,ivpic2, ivpic1; 
TextView TVpic3a, TVpic3b, TVpic3c, TVpic2a, TVpic2b, TVpic2c, TVpic1a, TVpic1b, TVpic1c; 
Intent pageMove; 
SharedPreferences gameData; 
int camORgal10 = 0; 
String threeNamea = "", threeNameb = "", threeNamec = "", twoNamea = "", twoNameb = "", twoNamec = "", oneNamea = "", oneNameb = "", oneNamec = ""; 

Bitmap bmp1, bmp2,bmp3; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.paytable); 
       intitializeThings();   
} 


public void intitializeThings() 
{ 
    bPic1 = (Button)findViewById(R.id.pic1but); 
    bPic2 = (Button)findViewById(R.id.pic2but); 
    bPic3 = (Button)findViewById(R.id.pic3but); 
    ivpic3 = (ImageView)findViewById(R.id.ivpic3a); 
    ivpic2 = (ImageView)findViewById(R.id.ivpic2a); 
    ivpic1 = (ImageView)findViewById(R.id.ivpic1a); 
    TVpic3a = (TextView)findViewById(R.id.pic3TVa); 
    TVpic3b = (TextView)findViewById(R.id.pic3TVb); 
    TVpic3c = (TextView)findViewById(R.id.pic3TVc); 
    TVpic2a = (TextView)findViewById(R.id.pic2TVa); 
    TVpic2b = (TextView)findViewById(R.id.pic2TVb); 
    TVpic2c = (TextView)findViewById(R.id.pic2TVc); 
    TVpic1a = (TextView)findViewById(R.id.pic1TVa); 
    TVpic1b = (TextView)findViewById(R.id.pic1TVb); 
    TVpic1c = (TextView)findViewById(R.id.pic1TVc); 


    bPic1.setOnClickListener(this); 
    bPic2.setOnClickListener(this); 
    bPic3.setOnClickListener(this); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.pic1but: 
     pageMove = new Intent(getApplicationContext(), PicOne.class); 
     pageMove.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     pageMove.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     //pageMove.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     finish(); 
     startActivity(pageMove); 

     break; 
    case R.id.pic2but: 
     pageMove = new Intent(getApplicationContext(), PicTwo.class); 
     pageMove.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     //pageMove.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     startActivity(pageMove); 
     finish(); 
          break; 
    case R.id.pic3but: 
     pageMove = new Intent(getApplicationContext(), PicThree.class); 
     pageMove.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     //pageMove.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     startActivity(pageMove); 
     finish(); 
          break;    
    } 
} 

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     Intent goOP = new Intent(this, MenuScreen.class); 
     goOP.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     goOP.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     finish(); 
     startActivity(goOP); 

     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 


@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 

} 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 


     gameData = getSharedPreferences(MenuScreen.MYFOLDER, 0); 
     oneNamea = gameData.getString("NUM10NAME1", "one"); 
     oneNameb = gameData.getString("NUM10NAME2", "two"); 
     oneNamec = gameData.getString("NUM10NAME3", "three"); 
     camORgal10 = gameData.getInt("NUM10CAMGAL", 0); 


     if(camORgal10 == 1) 
     { 
      File pic1 = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_1.PNG"); 
      if(pic1.exists()) 
      { 
       bmp1 = BitmapFactory.decodeFile(pic1.getAbsolutePath()); 
      } 
      else 
      { 
       bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.red); 
      } 
     } 

     else if(camORgal10 == 0) 
     { 
      bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.red); 
     } 
     else 
     { 
      bmp1 = BitmapFactory.decodeResource(getResources(), R.drawable.red); 
     } 


     File pic2 = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_2.PNG"); 
     File pic3 = new File(Environment.getExternalStorageDirectory() + "/MySpot/image_3.PNG"); 


     if(pic2.exists()) 
     { 
      bmp2 = BitmapFactory.decodeFile(pic2.getAbsolutePath()); 
     } 
     else 
     { 
      bmp2 = BitmapFactory.decodeResource(getResources(), R.drawable.purple); 
     } 
     if(pic3.exists()) 
     { 
      bmp3 = BitmapFactory.decodeFile(pic3.getAbsolutePath()); 
     } 
     else 
     { 
      bmp3 = BitmapFactory.decodeResource(getResources(), R.drawable.green); 
     } 


     ivpic3.setImageBitmap(bmp3); 

     ivpic2.setImageBitmap(bmp2); 

     ivpic1.setImageBitmap(bmp1); 

     TVpic1a.setText(oneNamea); 
     TVpic1b.setText(oneNameb); 
     TVpic1c.setText(oneNamec); 

} 


} 
+1

クラッシュについて教えてくれるlogcatは何ですか? – dldnh

+0

カメラのためエミュレータで使用できないため、携帯電話に搭載されています。私はそれに猫を記録する方法を知らない。 – ncg33

+0

デバイスでlogcatを使うことができます。単に "adb logcat -s devid"と言う必要があります。devidは "adb devices" – dldnh

答えて

1

Logcatはスタックトレースを提供し、デバッグを使用してクラッシュする場所を特定します。コード、特にOOPコードを読み込んで最新のアプリケーションをデバッグすることは、ほとんど不可能です。

0

これはおそらく、AOSが実際にアプリケーションを終了しないと思われるかもしれないという事実に起因すると思われます。だから、次のスタートでAOSはあなたのアプリを "最初から"起動しませんが、あなたのアンデッドのキャッシュされたアプリを起動します。そしてあなたのロジックがあなたのアプリがクラッシュするとは予想されなかったからです。私はそれがクラッシュの直後にもう一度OKに始まると確信していますが、次のスタートがもう一度クラッシュする - >ループ。だから、System.exit(0)(あなたのアプリがゾンビになることを保証するために、最も進んだ開発者は、その悪い練習を言うつもり)を使用しないようにするか、アプリケーションのロジックを変更して、まだそこにいる。

関連する問題