我是一个新的Android开发者,我有一个问题,当我开始一个新的活动,提供一个项目列表的细节。
我的第一个活动是列出智能手机上安装的所有应用程序。当我单击此列表的一个项目时,第二个活动开始显示该项目的详细信息。
我的PInfo对象是包含所有应用程序信息(版本、名称、位图)的对象。
public class PInfo implements Serializable{
private static final long serialVersionUID = 1L;
private String appname = "";
private String pname = "";
private String versionName = "";
private int versionCode = 0;
private Bitmap icon ;
private static ByteBuffer dst;
private static byte[] bytesar;
public String getAppname() {
return appname;
}
public void setAppname(String appname) {
this.appname = appname;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getVersionName() {
return versionName;
}
public void setVersionName(String versionName) {
this.versionName = versionName;
}
public int getVersionCode() {
return versionCode;
}
public void setVersionCode(int versionCode) {
this.versionCode = versionCode;
}
public Bitmap getIcon() {
return icon;
}
public void setIcon(Bitmap icon) {
this.icon = icon;
}
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeObject(appname);
out.writeObject(pname);
out.writeObject(versionName);
out.writeInt(versionCode);
out.writeInt(icon.getRowBytes());
out.writeInt(icon.getHeight());
out.writeInt(icon.getWidth());
int bmSize = icon.getRowBytes() * icon.getHeight();
if(dst==null || bmSize > dst.capacity())
dst= ByteBuffer.allocate(bmSize);
out.writeInt(dst.capacity());
dst.position(0);
icon.copyPixelsToBuffer(dst);
if(bytesar==null || bmSize > bytesar.length)
bytesar=new byte[bmSize];
dst.position(0);
dst.get(bytesar);
out.write(bytesar, 0, bytesar.length);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
appname=(String) in.readObject();
pname=(String) in.readObject();
versionName=(String) in.readObject();
versionCode= in.readInt();
int nbRowBytes=in.readInt();
int height=in.readInt();
int width=in.readInt();
int bmSize=in.readInt();
if(bytesar==null || bmSize > bytesar.length)
bytesar= new byte[bmSize];
int offset=0;
while(in.available()>0){
offset=offset + in.read(bytesar, offset, in.available());
}
if(dst==null || bmSize > dst.capacity())
dst= ByteBuffer.allocate(bmSize);
dst.position(0);
dst.put(bytesar);
dst.position(0);
icon=Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
icon.copyPixelsFromBuffer(dst);
//in.close();
}
我的列表活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_application_list);
if (savedInstanceState != null) {
apps = (ArrayList<PInfo>) savedInstanceState.getSerializable("apps");
} else {
apps = new ArrayList<PInfo>();
apps = getInstalledApps(false);
}
appAdapter = new AppAdapter(apps);
setListAdapter(appAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long index) {
AppAdapter appAdapter = new AppAdapter(apps);
PInfo app = appAdapter.getItem(position);
Intent intent = new Intent(ApplicationListActivity.this,ApplicationDetailActivity.class);
//intent.putExtra("app", app);
intent.putExtra("app_index", index);
startActivity(intent);
}
private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) {
ArrayList<PInfo> res = new ArrayList<PInfo>();
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if ((!getSysPackages) && (p.versionName == null)) {
continue ;
}
PInfo newInfo = new PInfo();
newInfo.setAppname(p.applicationInfo.loadLabel(getPackageManager()).toString());
newInfo.setPname(p.packageName);
newInfo.setVersionName(p.versionName);
newInfo.setVersionCode(p.versionCode);
Drawable d = p.applicationInfo.loadIcon(getPackageManager());
Bitmap bitmap = ((BitmapDrawable)d).getBitmap();
newInfo.setIcon(bitmap);
res.add(newInfo);
}
return res;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable("apps", apps);
super.onSaveInstanceState(outState);
}
我的详细信息活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_application_detail);
//PInfo p = (PInfo)getIntent().getExtras().getSerializable("app");
PackageInfo p = getPackageManager().getInstalledPackages(0).get((int)getIntent().getExtras().getLong("app_index"));
appName = (TextView) findViewById(R.id.appName);
versionName = (TextView) findViewById(R.id.versionName);
detailIcon = (ImageView) findViewById(R.id.detailIcon);
appName.setText(p.applicationInfo.loadLabel(getPackageManager()).toString());
versionName.setText(p.versionName);
detailIcon.setImageDrawable(p.applicationInfo.loadIcon(getPackageManager()));
}
10-31 15:06:53.065:D/DalvikVM(3406):WAIT_FOR_CONCURRENT_GC阻塞20ms
10-31 15:06:53.100:D/DalvikVM(3406):GC_CONCURRENT释放1013K,18%释放46177K/55751K,暂停12ms+3ms,总计33ms
10-31 15:06:53.100:D/DalvikVM(3406):WAIT_FOR_CONCURRENT_GC阻塞21ms
10-31 15:06:53.115:D/DalvikVM(3406):GC_FOR_ALLOC释放0K,18%释放46177K/55751K,暂停13ms,总计13ms
10-31 15:06:53.115:I/dalvikvm-heap(3406):将堆(frag大小写)增长到47.644MB,用于2105798字节分配
10-31 15:06:53.145:D/DalvikVM(3406):GC_CONCURRENT释放1027K,16%释放47206K/55751K,暂停12ms+3ms,总计30ms
10-31 15:06:53.145:D/DalvikVM(3406):WAIT_FOR_CONCURRENT_GC阻塞16ms
10-31 15:06:53.160:D/DalvikVM(3406):GC_FOR_ALLOC释放0K,16%释放47206K/55751K,暂停15ms,总计15ms
10-31 15:06:53.165:I/dalvikvm-heap(3406):将堆(frag大小写)增长到50.659MB,用于4213190字节分配
10-31 15:06:53.195:D/DalvikVM(3406):GC_CONCURRENT释放6664K,20%释放44656K/55751K,暂停12ms+3ms,总计32ms
10-31 15:06:53.195:D/DalvikVM(3406):WAIT_FOR_CONCURRENT_GC阻塞19ms
我希望我已经足够清楚了,抱歉,可能的拼写错误。
最后,是我的readObject和writeObject不适合位图的序列化。我找到了另一种方法,但存在一些性能问题(返回列表需要4或5秒):在Java中序列化和反序列化android.graphics.bitmap
我正在建立一个应用程序,用户将把他们的测试和作业和任何东西。我想知道我的应用程序是否有可能在测试前一周和一天发出通知? 我看到的到处都是firebase通知和push通知。 我不想要这些在线通知,我将需要应用程序发送他们自己离线。这可能吗?
问题内容: 我已经使用提交按钮在ajax中发送了数据,而没有刷新任何页面。但是页面刷新了。 请检查我的代码,让我知道问题所在。 ajax.php 问题答案: js已经阻止了表单提交 问题中的代码 已经 阻止了此行提交表单: 这意味着:问题中的JavaScript代码根本没有运行。 该表格尚不存在 这里的问题是当此行代码运行时: 那个元素还没有加入dom 。因此,提交处理程序不附加任何内容-表单提交
我正在基于Tomcat servlet和NIO创建服务。输入时有大的XML请求(约100 MB),通过HTML POST方法发送。我只想流前8千磅,然后立即发送响应到客户端。 当我尝试发送小请求(内容中只有几行)时,套接字工作正常。 2016-02-01 10:44:52 Http11NioProtocol[DEBUG]套接字:[org.apache.tomcat.util.net.NioEndp
到目前为止,我运行的是一台视窗8.1电脑,它没有像Android Studio或Eclipse这样的IDE的存储或内存。我想下载Android SDK工具,没有IDE。如何才能做到这一点?
我使应用程序有两个活动。 2 ExitText(登录名和密码) 第二个: 2 TextView(获取登录名和密码与共享首选项); 按钮(清除共享首选项上的数据,意图优先活动)。 如何下一步:当SharedReferences上有一些数据时-应用程序将从第二个屏幕启动。 例如,我提出: if(用户!=null 但是,从技术上讲,它首先运行第一个活动,然后再运行第二个活动。若有一些方法可以用另一个活动
我正在开发一个应用程序,该应用程序收集用户选择(从复选框中)并将其发送到一个新活动(当按下按钮时)。在新活动中,将收集一个新数据(editText)并将新收集的接收数据合并并通过电子邮件发送。 当我按下第一个按钮将复选框数据发送到新活动时,我得到一个错误: 应用程序意外停止 下面是代码: 复选框转换方法为: 所以,如果有任何错误,请告诉我。