编辑:我弄清楚出了什么问题,就像我说我将包名改为com.musicbynumbers.pianoscales
到com.musicbynumbers.pianoscalesfull
。但我忘了
change int id =getResources().getIdentifier("com.musicbynumbers.pianoscalesfull:drawable/" + gotScale, null, null);
所有代码都很好。非常感谢你的帮助。
好的,在我遇到确切的问题之前,这只是一些beckground信息: 我正在使用eclipse。几个星期前,我在游戏商店发布了我的第一个应用程序钢琴秤应用程序。两天前,我意识到许可证阻止了一些支付应用程序费用的用户使用它。我注释了许可并进行了更新,但我的密钥库已损坏。所以我从商店中删除了应用程序并更改了包名称。该应用程序是一个菜单,可以显示所选图像的显示活动。当我再次测试应用程序时,我发现只显示默认的android图像。我不认为我更改了子菜单或显示活动中的任何代码,因为它正在工作,但无论如何我都会把它们放好。顺便说一句,这是我的第一个应用程序,该应用程序被安排在明天随同一本书发布,所以这对我来说是一个真正的第11小时情况。
这是导致活动“显示”
的几个子菜单之一 package com.musicbynumbers.scales;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageButton;
import com.musicbynumbers.pianoscalesfull.R;
public class majorScales extends Activity implements View.OnClickListener {
Button aflatmaj, amaj, bflatmaj, bmaj, cmaj, dflatmaj, dmaj, eflatmaj, emaj, fmaj, fsharpmaj, gmaj;
ImageButton mainMenu;
Intent j;
String scaleName;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
setContentView(R.layout.majorscales);
j = new Intent(this, display.class);
mainMenu = (ImageButton) findViewById(R.id.imagelogo);
aflatmaj = (Button) findViewById(R.id.aflatmajb);
amaj = (Button) findViewById(R.id.amajb);
bflatmaj = (Button) findViewById(R.id.bflatmajb);
bmaj = (Button) findViewById(R.id.bmajb);
cmaj = (Button) findViewById(R.id.cmajb);
dflatmaj = (Button) findViewById(R.id.dflatmajb);
dmaj = (Button) findViewById(R.id.dmajb);
eflatmaj = (Button) findViewById(R.id.eflatmajb);
emaj = (Button) findViewById(R.id.emajb);
fmaj = (Button) findViewById(R.id.fmajb);
fsharpmaj = (Button) findViewById(R.id.fsharpmajb);
gmaj = (Button) findViewById(R.id.gmajb);
mainMenu.setOnClickListener(this);
aflatmaj.setOnClickListener(this);
amaj.setOnClickListener(this);
bflatmaj.setOnClickListener(this);
bmaj.setOnClickListener(this);
cmaj.setOnClickListener(this);
dflatmaj.setOnClickListener(this);
dmaj.setOnClickListener(this);
eflatmaj.setOnClickListener(this);
emaj.setOnClickListener(this);
fmaj.setOnClickListener(this);
fsharpmaj.setOnClickListener(this);
gmaj.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch(arg0.getId()){
case R.id.imagelogo:
Intent i = new Intent(majorScales.this, MainMenu.class);
startActivity(i);
break;
case R.id.aflatmajb:
scaleName = "aflatmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.amajb:
scaleName = "amaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.bflatmajb:
scaleName = "bflatmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.bmajb:
scaleName = "bmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.cmajb:
scaleName = "cmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.dflatmajb:
scaleName = "dflatmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.dmajb:
scaleName = "dmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.eflatmajb:
scaleName = "eflatmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.emajb:
scaleName = "emaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.fmajb:
scaleName = "fmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.fsharpmajb:
scaleName = "fsharpmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
case R.id.gmajb:
scaleName = "gmaj";
j.putExtra("key", scaleName);
startActivity(j);
break;
}
}
}
这是显示所选图像的显示活动,但现在只显示默认值。
package com.musicbynumbers.scales;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import com.musicbynumbers.pianoscalesfull.R;
public class display extends Activity {
ImageView displayScale;
String gotScale;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.display);
Initalize();
gotScale = getIntent().getStringExtra("key");
ImageView displayScale = (ImageView) findViewById(R.id.displayImage);
//aflatmaj-gotscale
int id = getResources().getIdentifier("com.musicbynumbers.pianoscales:drawable/" + gotScale, null, null);
displayScale.setImageResource(id);
}
private void Initalize() {
// TODO Auto-generated method stub
displayScale = (ImageView) findViewById(R.id.displayImage);
gotScale = "ic_launcher.png";
}}
我非常感谢任何帮助,因为我已经没时间了。
编辑:
logcat的:
03-11 18:38:00.194: I/ActivityManager(59): Starting activity: Intent { cmp=com.musicbynumbers.pianoscalesfull/com.musicbynumbers.scales.majorScales }
03-11 18:38:00.824: W/ActivityManager(59): Activity pause timeout for HistoryRecord{45f03618 com.musicbynumbers.pianoscalesfull/com.musicbynumbers.scales.MainMenu}
03-11 18:38:03.284: I/ActivityManager(59): Displayed activity com.musicbynumbers.pianoscalesfull/com.musicbynumbers.scales.majorScales: 2454 ms (total 2454 ms)
03-11 18:38:07.854: I/ActivityManager(59): Starting activity: Intent { cmp=com.musicbynumbers.pianoscalesfull/com.musicbynumbers.scales.display (has extras) }
03-11 18:38:08.234: I/WindowManager(59): Setting rotation to 1, animFlags=1
03-11 18:38:08.404: I/ActivityManager(59): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18 uiMode=17 seq=32}
03-11 18:38:09.616: I/ActivityManager(59): Displayed activity com.musicbynumbers.pianoscalesfull/com.musicbynumbers.scales.display: 1384 ms (total 1384 ms)
03-11 18:38:13.123: D/dalvikvm(59): GC_EXPLICIT freed 3329 objects / 183760 bytes in 462ms
答案 0 :(得分:0)
我不明白:
在显示活动中,您:ImageView displayScale;
在开头宣布,然后再次声明:ImageView displayScale = (ImageView) findViewById(R.id.displayImage);
这个问题主要是因为你得到了Initalize();去那儿。
如果你说你没有收到任何东西,除了默认的Android图像,那么显然
gotScale = getIntent().getStringExtra("key");
无法正常工作,剩下的就是:gotScale = "ic_launcher.png";
来自初始化。
尝试在获取图像之前记录gotScale
参数,具体取决于它,看看它是什么。
修改强>
要记录:
Log.d(“ActivityName”,“您要显示的消息”);
使用cmd监视logcat以查看日志消息。
或者您可以随时显示祝酒词,以查看gotScale
的内容。
答案 1 :(得分:0)
我没有测试过我的代码。所以你可以把它作为一个建议。在检查您的代码后,似乎
int id = getResources().getIdentifier("com.musicbynumbers.pianoscales:drawable/" + gotScale, null, null);
displayScale.setImageResource(id);
看起来很奇怪。您能否记录返回的标识符并进行验证。
//你可以尝试一个很好的替代品。 //得到图标
String uri = "drawable/"+gotScale;
int id = getResources().getIdentifier(uri, "drawable", getPackageName()); // your res id.
希望这能帮助您节省一些时间。 :)