我发现你可以使用这样的东西来创建一个文件:
FileOutputStream fs = openFileOutput("/test.in", MODE_WORLD_WRITEABLE);
String s = "[Head]\r\n";
s += "Type=2";
byte[] buffer = s.getBytes();
fs.write(buffer);
fs.close();
Run Code Online (Sandbox Code Playgroud)
运行上面的代码时,我得到一个IllegalArgumentException:
java.lang.IllegalArgumentException:文件/test.in包含路径分隔符
而且我猜"/"不受欢迎.我想要"/",因为我需要将文件写入设备的根目录,如API中所述,试图遵循:
请求是文件文件(UNICODE),文件扩展名为".in".当应用程序放在移动设备的根目录中时,应用程序将读取并解析.in文件.
问题是:如何将文件放在根目录中?我一直在寻找答案,但还没有找到答案.
我一直在寻找关于如何正确扩展AlertDialogs并获得预期行为的例子,但我几乎找不到任何东西.
谷歌上的文档也没有多说.
是的,我知道我可以使用AlertDialog.Builder来构建最常见的东西,但由于某些原因,我想创建自己的AlertDialogs(我想要的代码包含在单独的java文件中,原因之一).
我创建了我的PausDialog.java(参见下面的代码),它显示但我无法获得标题或任何按钮(正面,负面等)以显示在对话框中.看这张图:

那么,问题1:我在哪里可以找到关于如何正确扩展AlertDialogs以及之后如何使用它们的好的,干净的和有用的示例
问题2:为什么我不能使用下面的自定义AlertDialog看到标题或任何按钮?
PausDialog.java
package Test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Handler;
import android.os.SystemClock;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class PausDialog extends AlertDialog
{
protected PausDialog(Context context)
{
super(context, R.style.DialogTheme);
}
@Override
protected void onCreate(android.os.Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.paus);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.gravity = Gravity.TOP;
final …Run Code Online (Sandbox Code Playgroud) (对不起,发现这个问题已经回答了,见下文)
所以,我首先尝试扩展AlertDialog以便我可以使用我的弹出窗口中需要的EditTexts做一些事情,但是当我无法使用它时,我现在使用MainActivity中的普通AlertDialog.Builder来创建我需要的.
下面的代码创建一个AlertDialog并使用"setView"向我添加自定义视图.首次显示AlertDialog时,应禁用其POSITIVE按钮,并且只有当所有EditTexts都有文本时才应启用POSITIVT按钮.
所以我尝试在使用builder.create()之后执行此操作,获取正面按钮.
但是,alert.getButton(AlertDialog.BUTTON_POSITIVE)返回NULL.为什么?
final EditText ed1 = (EditText) findViewById(R.id.editTextPausArea);
final EditText ed2 = (EditText) findViewById(R.id.EditTextPausTimeFrom);
final EditText ed3 = (EditText) findViewById(R.id.EditTextPausTimeTo);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
.setTitle("Begär paus")
.setView(view)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
}).setNegativeButton("Avbryt", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Do nothing.
}
});
final AlertDialog alert = builder.create();
final Button b = alert.getButton(AlertDialog.BUTTON_POSITIVE);
b.setEnabled(false); // NullPointerException here!
Run Code Online (Sandbox Code Playgroud) 我想弄清楚Android在生命周期问题上的工作原理.
我已经决定拥有一个长期运行的服务来保存我的TCP连接和其他东西.
我有一个Activity,StartupActivity.该Activity启动一项服务,然后按一个按钮完成活动.然后我再次启动相同的app/Activity,从而再次执行startService.
但是,我预计服务仍然存在(没有调用onDestroy),但服务中的onCreate方法仍在执行中.
为什么?
第1步:在StartupActivit中执行onCreate:
@Override
protected void onCreate(android.os.Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.startup);
startService(new Intent(StartupActivity.this, SamcomService.class));
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_PROGRESS_MESSAGE"));
registerReceiver(connectionReceiver, new IntentFilter("STARTUP_FINISH"));
final Button button = (Button) findViewById(R.id.buttonExit);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
Run Code Online (Sandbox Code Playgroud)
第2步:我按下按钮,调用Activity.finish()(我返回主屏幕)
第3步:我再次启动应用程序,再次执行活动的onCreate,从而启动相同的服务
现在,当我第二次启动应用程序服务应该运行时(如何检查?).我没有看到调用Service onDestroy时显示的Toast,我也看到了Service创建的Notification(并删除了onDestroy).
但是,onCreate是第二次执行.我现在有多个服务同时运行吗?
我已经阅读了一些有关异步/等待vs线程池vs线程的知识,我不得不承认,我不清楚细节。我想我有一个具体的问题的答案,但是我不能肯定地说。
我也知道关于SO和其他地方的许多问题,这些问题正在讨论和解释中。我在SO上读到了不少文章,但没有找到明确的答案,或者至少没有我想要的清晰。
我收集了什么:
但是,一位同事说了这样的话:
所以,我要问的是:
请注意,我不是从服务器的角度讨论客户端的事情。
预先抱歉,如果我错过了确切的答案,我已经看过=)
我主要在.NET C#中开发,我喜欢C#中的事件.
我现在正在做Android的东西,因此必须处理Java.当将一些代码从C#移植到Java时,我遇到了事件的问题; Java没有任何与C#Events相对应的内容.
因此,在阅读Java如何处理"事件"时,我唯一能得出的结论就是它没有.Java中没有"事件"这样的东西.相反,他们使用普通的接口和实现这些接口的类.
在Java中:首先,您必须首先创建接口然后,所有想要监听"事件"的类都必须实现该接口.然后,触发"事件"的类必须保留所有侦听器的列表(某种类型的数组)然后,触发"事件"的类必须有一个方法,以便侦听器可以将自己添加到数组
当触发类决定"触发事件"时,它必须遍历侦听器的数组,调用方法.
这只是简单的界面使用,而不是我世界中的事件.
我错了吗?
我需要能够将文本文件写入我的Android设备的根目录(正如相关问题所解释的那样).
我可以更改根目录的写权限吗?如果是,如何更改?
我尝试使用adb推送文件,但它说文件系统是只读的=(
它非常烦人,我无法控制自己的设备,一切都是如此受限=(
编辑1:这个线程已演变成讨论Sygic Navigation及其API,这在Android平台上似乎是错误的.我还有一些其他问题可以讨论Sygic及其导航软件.
所以,我一直在搞 webservices 一段时间,我一直回到一些基础知识,我似乎永远不会正确。
在 .NET/C# 中使用 WebServiceHost 时,您可以使用 GET/POST/etc 定义方法/端点。设置一个 GET 方法很容易,而且它的工作方式非常直接,而且很容易理解它是如何工作的。例如:
[OperationContract]
[WebInvoke(Method = "GET", UriTemplate = "/PutMessage/{jsonString}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
string PutMessage(string jsonString);
Run Code Online (Sandbox Code Playgroud)
如果我调用 http:///MyWebService/PutMessage/{MyJsonString} 我会通过该方法,并且一切都很好(或多或少)。
但是,当我将其定义为POST时,这意味着什么?
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/PutMessage/{jsonString}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
string PutMessage(string jsonString);
Run Code Online (Sandbox Code Playgroud)
UriTemplate 在这里做什么?如果我执行 POST,我希望数据不包含在 URI 中,而是包含在帖子的“数据部分”中。但是我是否在数据部分定义了变量名?WebServiceHost/.NET 如何知道帖子的“数据部分”中包含的内容要放入变量 jsonString 中?我如何从客户端(不是 C#,我们说 JQuery)发布数据,以便在服务器端正确解释它?
(WebMessageFormat 是如何影响事物的?我到处都读过这方面的内容(MSDN、Stackoverflow 等),但还没有找到明确而好的答案。)
在我试图理解这一点时,我想我会制作一个非常简单的 POST 方法,如下所示:
[OperationContract]
[WebInvoke]
string PutJSONRequest(string …Run Code Online (Sandbox Code Playgroud) 我在这里发布了另一个 SO 问题,作为后续,我的同事做了一个测试,如下所示,作为 async/await/Tasks 参数的某种形式的“反击”。
(我知道lock不需要 on resultList,请忽略)
new Task().Start()会在 ThreadPool 上调度操作,并在 ThreadPool 上的不同线程上执行测试代码。这是否意味着第一次和第二次测试或多或少相同?(我猜不是,请解释android ×6
c# ×4
async-await ×2
file-io ×2
.net ×1
http-post ×1
java ×1
linux ×1
service ×1
task ×1
threadpool ×1
wcf ×1
web-services ×1