小编Ted*_*Ted的帖子

如何在Android设备的根目录中创建/写入文件?

我发现你可以使用这样的东西来创建一个文件:

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文件.

问题是:如何将文件放在根目录中?我一直在寻找答案,但还没有找到答案.

file-io android

3
推荐指数
1
解决办法
3万
查看次数

扩展Android中的AlertDialogs(在哪里可以找到示例,如何获取标题和按钮)

我一直在寻找关于如何正确扩展AlertDialogs并获得预期行为的例子,但我几乎找不到任何东西.

谷歌上的文档也没有多说.

是的,我知道我可以使用AlertDialog.Builder来构建最常见的东西,但由于某些原因,我想创建自己的AlertDialogs(我想要的代码包含在单独的java文件中,原因之一).

我创建了我的PausDialog.java(参见下面的代码),它显示但我无法获得标题或任何按钮(正面,负面等)以显示在对话框中.看这张图:

PausDialog中没有按钮也没有标题

那么,问题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)

android android-alertdialog

3
推荐指数
3
解决办法
2万
查看次数

为什么alert.getButton(AlertDialog.BUTTON_POSITIVE)返回NULL?

(对不起,发现这个问题已经回答了,见下文)

所以,我首先尝试扩展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 android-alertdialog

3
推荐指数
1
解决办法
7254
查看次数

如果我从Activity中的onCreate启动服务,完成()活动,然后再次启动应用程序,会发生什么?

我想弄清楚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是第二次执行.我现在有多个服务同时运行吗?

service android

2
推荐指数
1
解决办法
4878
查看次数

执行I / O操作的ThreadPool线程-等待时可以重用线程吗?

我已经阅读了一些有关异步/等待vs线程池vs线程的知识,我不得不承认,我不清楚细节。我我有一个具体的问题的答案,但是我不能肯定地说。

我也知道关于SO和其他地方的许多问题,这些问题正在讨论和解释中。我在SO上读到了不少文章,但没有找到明确的答案,或者至少没有我想要的清晰。

我收集了什么:

  • 在I / O操作中使用async / await,将使该线程可用于其他用途,而I / O操作将在其他地方继续进行
  • 对于服务器应用程序,这意味着更高的吞吐量等

但是,一位同事说了这样的话:

  • 使用ThreadPool执行相同的I / O操作的行为与async / await几乎相同
  • 当ThreadPool线程将I / O操作“移交给”操作系统时,它可能会等待答案,但这无关紧要,因为在CPU上没有任何工作(线程正在等待),因此,ThreadPool / OS /框架可以使用或生成另一个线程来执行其他一些工作。
  • 由于线程池最多只能有32000个线程,因此没关系,因为它可以使用更多线程。线程的开销很小,只有几个字节的内存

所以,我要问的是:

  • 来自ThreadPool的线程是否在I / O操作中阻塞?
  • 是否有关系,因为OS / framework / Threadpool可以在需要其他工作时仅使用池中的另一个线程?
  • 底线:使用async / await或ThreadPool的I / O操作;对效率和生产量有影响吗?

请注意,我不是从服务器的角度讨论客户端的事情。

预先抱歉,如果我错过了确切的答案,我已经看过=)

.net c# multithreading threadpool async-await

2
推荐指数
1
解决办法
111
查看次数

Java"事件" - 仅仅是接口.当它只是一个普通的接口和实现该接口的类时,为什么假装它是事件?

我主要在.NET C#中开发,我喜欢C#中的事件.

我现在正在做Android的东西,因此必须处理Java.当将一些代码从C#移植到Java时,我遇到了事件的问题; Java没有任何与C#Events相对应的内容.

因此,在阅读Java如何处理"事件"时,我唯一能得出的结论就是它没有.Java中没有"事件"这样的东西.相反,他们使用普通的接口和实现这些接口的类.

在Java中:首先,您必须首先创建接口然后,所有想要监听"事件"的类都必须实现该接口.然后,触发"事件"的类必须保留所有侦听器的列表(某种类型的数组)然后,触发"事件"的类必须有一个方法,以便侦听器可以将自己添加到数组

当触发类决定"触发事件"时,它必须遍历侦听器的数组,调用方法.

这只是简单的界面使用,而不是我世界中的事件.

我错了吗?

c# java android

1
推荐指数
1
解决办法
553
查看次数

我可以更改根目录的写访问权限吗?Sygic Navigation及其API

我需要能够将文本文件写入我的Android设备的根目录(正如相关问题所解释的那样).

我可以更改根目录的写权限吗?如果是,如何更改?

我尝试使用adb推送文件,但它说文件系统是只读的=(

它非常烦人,我无法控制自己的设备,一切都是如此受限=(


编辑1:这个线程已演变成讨论Sygic Navigation及其API,这在Android平台上似乎是错误的.我还有一些其他问题可以讨论Sygic及其导航软件.

linux file-io android

1
推荐指数
2
解决办法
9284
查看次数

获取 POST 端点以在自托管 (WebServiceHost) C# web 服务中工作?

所以,我一直在搞 webservices 一段时间,我一直回到一些基础知识,我似乎永远不会正确。

问题 1:

在 .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 等),但还没有找到明确而好的答案。)

问题2:

在我试图理解这一点时,我想我会制作一个非常简单的 POST 方法,如下所示:

[OperationContract]
[WebInvoke]
string PutJSONRequest(string …
Run Code Online (Sandbox Code Playgroud)

c# wcf web-services http-post webservicehost

1
推荐指数
1
解决办法
6946
查看次数

CPU 基准测试:Tasks vs ThreadPool vs Thread

我在这里发布了另一个 SO 问题,作为后续,我的同事做了一个测试,如下所示,作为 async/await/Tasks 参数的某种形式的“反击”。

(我知道lock不需要 on resultList,请忽略)

  • 我知道 async/await 和 Tasks不是用来处理 CPU 密集型任务,而是用来处理由操作系统完成的 I/O 操作。下面的基准测试是一项 CPU 密集型任务,因此测试从一开始就有缺陷。
  • 但是,据我了解, usingnew Task().Start()会在 ThreadPool 上调度操作,并在 ThreadPool 上的不同线程上执行测试代码。这是否意味着第一次和第二次测试或多或少相同?(我猜不是,请解释
  • 那为什么他们之间的差别这么大呢?

在此处输入图片说明

c# multithreading task async-await

-1
推荐指数
1
解决办法
395
查看次数