继续我学习Android的尝试,我只是阅读以下内容:
问题:用户是否可以选择终止应用程序,除非我们使用菜单选项来杀死它?如果不存在这样的选项,用户如何终止该应用程序?
答案:(Romain Guy):用户没有,系统会自动处理.这就是活动生命周期(特别是onPause/onStop/onDestroy)的用途.无论你做什么,都不要放"退出"或"退出"应用程序按钮.它与Android的应用程序模型无关.这也与核心应用程序的工作方式相反.
呵呵,我在Android世界中采取的每一步都会遇到某种问题=(
显然,你无法在Android中退出应用程序(但Android系统可以很好地完全破坏你的应用程序).那是怎么回事?我开始认为编写一个充当"普通应用程序"的应用程序是不可能的 - 用户可以在他/她决定这样做时退出应用程序.这不应该依赖操作系统来做.
我尝试创建的应用程序不是Android Market的应用程序.它不是一般公众"广泛使用"的应用程序,它是一个将用于非常狭窄的业务领域的商业应用程序.
我实际上真的很期待为Android平台开发,因为它解决了Windows Mobile和.NET中存在的许多问题.然而,上周对我来说有点懈怠...我希望我不必放弃Android,但它现在看起来不太好=(
有没有办法让我真的退出申请?
尝试使用Jackson序列化一个非常简单的对象时,我得到了一个例外.错误:
org.codehaus.jackson.map.JsonMappingException:没有为类MyPackage.TestA找到序列化程序,也没有发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))
下面是序列化的简单类和代码.
任何人都可以告诉我为什么会收到此错误?
public class TestA {
String SomeString = "asd";
}
TestA testA = new TestA();
ObjectMapper om = new ObjectMapper();
try {
String testAString = om.writeValueAsString(testA); // error here!
TestA newTestA = om.readValue(testAString, TestA.class);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud) 在OnClickListener中,我无法访问范围"外部"的大多数变量,如下所示:
findViewById(R.id.Button01).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent mainApps = new Intent(Intent.ACTION_MAIN);
mainApps.addCategory(Intent.CATEGORY_LAUNCHER);
List<ActivityInfo> activities = this.getPackageManager().queryIntentActivities(mainApps, 0);
/*
Intent intent = new Intent("com.sygic.drive/com.sygic/drive/.SygicDriveActivity");
startActivity(intent);*/
}
});
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我需要获取PacketManager,我无法得到它,因为我没有在OnClickListener中提供Context.
我可以在外面做一个静态引用,并在里面使用它,但这是正确的吗?似乎很奇怪必须一直这样做?
似乎我在Android世界中采取的每一步都遇到了问题.我很快就会在StackOverflow上提出20个问题hehe =)
通常,我通过USB将HTC Hero连接到计算机,然后以调试模式或正常模式启动应用程序.
So, the last time I ran the app in normal mode. Then I disconnect the device (I want to try to have it "free", not connected to computer) and I start the app from the menu. When I do that I get a popup saying "Application xxx is waiting for the debugger to attach" and there it stops and eventually dies.
Why is it waiting for the debugger, when the last time I ran the app …
来自.NET环境我现在正在寻找了解Dialog如何在Android中运行的方法.
在.NET中,调用MessageBox.Show(...)创建并显示弹出对话框.在对Show的调用中,我可以指定弹出窗口中应该有哪些按钮,例如:
DialogResult myDialogResult = MessageBox.Show("My text here", "My caption here", MessageBoxButtons.YesNoCancel);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当在弹出窗口中按下按钮时,对Show的调用将返回一个DialogResult,通知我单击了哪个按钮.请注意,在.NET中,执行将在调用Show(...)的行中停止,因此它可以在按下按钮时返回值.
如果我在上面的例子中按"否",则myDialogResult将等于
myDialogResult == DialogResult.No
Run Code Online (Sandbox Code Playgroud)
由于我发现使用/创建弹出窗口的.NET方式非常简单直观,我想在Android中创建弹出窗口的方式.
所以,问题是,是否有人知道如何"停止执行",如MessageBox.Show,然后每按一次按钮返回一个值(对话框消失)?
问候
编辑1: 更清楚一点:
我需要执行停止并等到用户选择了一个按钮来单击弹出窗口.显示对话框的调用后面的代码取决于在对话框中单击的按钮.
这就是为什么我不能使用Erich和Alex所建议的,因为在下面建议的onClick方法中编写代码是行不通的.原因是我无法继续"正常执行".让我举一个例子:
让我举一个例子:
int nextStep = 0; // this variable will not be reached from within the onClick-methods
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Hello!")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
nextStep = 1; // *** COMPILER ERROR!! ***
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int …Run Code Online (Sandbox Code Playgroud) 我正在试用Android Studio而不是Eclipse.我安装它然后启动一个全新的项目并按照向导.我没有添加自己的代码.
然后,我右键单击以创建一个新组件,一个新的片段:

并选择一个新片段:

我一看到,就看到编译错误:

...所以我开始谷歌搜索,并发现我需要安装和引用支持库4,我做.当我检查build.gradle(不管是什么,来自Eclipse的新手),我看到:

但我改变了

因为他们这样说这里.重新编译之后,错误仍然存在.然后我直接引用.jar文件,如下所示:

并再次重新编译yada yada,但这也没有帮助.
这种行为对我来说似乎很奇怪.我在这里错过了什么?这是SDK Manager视图:

那么,我错过了什么?谢谢=)
我通常在C#中编写代码的所有部分,在编写序列化的协议时,我使用FastSerializer快速高效地序列化/反序列化类.它也非常容易使用,并且非常直接地进行"版本控制",即处理不同版本的序列化.我通常使用的东西,看起来像这样:
public override void DeserializeOwnedData(SerializationReader reader, object context)
{
base.DeserializeOwnedData(reader, context);
byte serializeVersion = reader.ReadByte(); // used to keep what version we are using
this.CustomerNumber = reader.ReadString();
this.HomeAddress = reader.ReadString();
this.ZipCode = reader.ReadString();
this.HomeCity = reader.ReadString();
if (serializeVersion > 0)
this.HomeAddressObj = reader.ReadUInt32();
if (serializeVersion > 1)
this.County = reader.ReadString();
if (serializeVersion > 2)
this.Muni = reader.ReadString();
if (serializeVersion > 3)
this._AvailableCustomers = reader.ReadList<uint>();
}
Run Code Online (Sandbox Code Playgroud)
和
public override void SerializeOwnedData(SerializationWriter writer, object context)
{
base.SerializeOwnedData(writer, context);
byte serializeVersion = 4; …Run Code Online (Sandbox Code Playgroud) 我会试着解释一下我的追求.我不知道它的技术术语,所以这里是:
示例1:如果我在表单上放置ListView并添加一些列,我可以在"设计时"中单击并拖动列以调整它们的大小.
示例2:现在,我将ListView放在UserControl中并将其命名为"MyCustomListView"(并且可能添加一些方法来以某种方式增强它).
如果我知道在表单上放置"MyCustomListView",我无法单击并拖动列标题以在"设计时"中调整它们的大小.
有没有办法轻松实现这一目标?某种形式的"将点击并拖动事件传递给底层控件并让该控件发挥其魔力".我不是真的想要重新编码,只需传递鼠标点击(或其他任何东西)并让,在这种情况下,ListView会像上面第一个例子中那样做出反应.
我在使用Jackson反序列化JSON字符串时遇到问题(但我将对象序列化为JSON没有问题).
下面我介绍我使用的课程.当我接收一个JSON字符串(一个在其他地方序列化并通过webservice检索的ProtocolContainer)并希望对其进行反序列化时,问题就出现了:
JSON字符串:
{ "DataPacketJSONString":NULL, "DataPacketType": "MyPackage.DataPackets.LoginRequestReply", "的MessageId":6604, "SenderUsername":NULL, "子分组":{ "__类型": "LoginRequestReply:#MyPackage.DataPackets","原因":"错误的传递或用户名","成功":false,"用户名":"用户1"}}
我试着像这样反序列化:
ProtocolContainer ret = ProtocolContainer.Create(jsonString);
Run Code Online (Sandbox Code Playgroud)
并且可以在下面看到在ProtocolContainer中执行的代码.例外:
org.codehaus.jackson.map.JsonMappingException:找不到类型[simple type,class MyPackage.ProtocolContainer]的合适构造函数:无法在[Source:java.io.]中从JSON对象实例化(需要添加/启用类型信息?). StringReader @ 4059dcb0; line:1,column:2]
我真的很感激这里的一些输入=)Thx!
ProtocolContainer.java - 封装我的"SubPackets"的容器类:
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import MyPackage.DataPackets.*;
public class ProtocolContainer
{
public String SenderUsername;
public String DataPacketType;
public long MessageId;
public String DataPacketJSONString;
public DataPacket SubPacket;
public ProtocolContainer(DataPacket dp)
{
DataPacketType = dp.getClass().toString().substring(6);
SubPacket = dp;
}
public String toJSON()
{
try {
if (SubPacket != …Run Code Online (Sandbox Code Playgroud) 创建一个Intent以便MyActivity对用户做出反应时,使用XML标记很容易按下Home键.
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我想知道如何避免在主屏幕上选择"你想要使用什么活动"?HTC已经使其"Touch Flo"(Sense)覆盖默认的"开始"活动,如果我想通常使用"开始"或"TouchFlo",我永远不会得到问题.但是,当我添加自己的Activity时,我总能得到问题.
是的,我知道我可以检查"将其作为标准使用" - 检查框,但这不是我现在想要的.所以,问题是:我可以使系统覆盖其他所有内容并始终使用MyActivity作为默认值吗?
接下来,我真的只想在我的应用程序运行时覆盖正常的主屏幕.如果它没有运行,一切都应该正常工作,即MyActivity不应该与Home按钮相关联.
任何想法都会很棒.