小编Dew*_*oel的帖子

将支持库添加到Android项目

为什么我很难进入Android开发阶段?多年来我一直在用各种语言进行开发,出于某种原因,似乎无法超越Android的"jeez-i-still-a-total-noob"舞台.

所以我想在我的Android 2.3.3项目中添加一个Action Bar.没问题,对吧?Android开发者网站有一篇很好的文章解释了如何做到这一点.当然,它涉及添加appcompat v7支持库.没问题,即使这是在此页面上逐步记录的.但是,就像在Android中几乎所有这样的练习一样,我发现你可以完全按照页面告诉你做的那样,如果没有大量的谷歌搜索来修复你之后遇到的错误,它仍然无法工作.

所以我按照上面链接中"使用资源添加库"一节中的"使用Eclipse"中的步骤进行操作.我得到的第一个错误是无法解析目标'android-16'.没问题,这个我可以为自己弄清楚,但我很好奇,我一直在关注的文件中有什么东西可以告诉我我需要安装Android 4.1.2(API16)吗?我是刚刚读完它还是我自己知道,为了做我想做的事情,我需要API16?

没关系,至少我可以解决这个问题,但后来我遇到了一个新问题.一旦我将android-support-v7-compat库添加到我的项目并单击OK按钮,控制台输出就会出现错误,第一个是:

C:...\android-support-v7-appcompat\res\values-v14\styles_base.xml:24:错误:检索项目的父项时出错:找不到与给定名称匹配的资源'android:Widget.Holo.ActionBar ".

和其他60个奇怪的错误是相似的,但对于不同的给定名称.

如果有人能帮助我,我真的很感激.显然我想知道如何解决这个特殊的问题,但如果有人能给我一些关于如何通过这个非常令人沮丧的阶段学习这个新的开发环境的技巧,我会非常感激.除了按照Android开发者网站上的说明一步一步地执行这些错误之外,我应该做些什么呢?

eclipse android android-support-library

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

getExternalFilesDir(null)返回null

我再一次提出了一个问题,这个问题已经被问过并在之前得到了解答,但在我的实施中,它仍然无效.

我在主要活动的onCreate方法的最开始就调用了getExternalFilesDir(null).它每次都返回null,无论是在AVD中运行还是在我的手机上运行(Samsung Galaxy Plus).

是的,我<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />AndroidManifest.xml中有一行,是的,我在拨打电话之前检查外部存储状态并且已挂载.

这是我的onCreate()方法中的前三行.实际上,它只是在super.onCreate()setContentView()调用之后.

String state = Environment.getExternalStorageState();
File extFiles = getExternalFilesDir(null);
File locFiles = getFilesDir();
Run Code Online (Sandbox Code Playgroud)

因此,一旦执行了这三行,这些就是变量的值:

state == "mounted"
extFiles == null
locFiles == "/data/data/com.mypackage.name/files"
Run Code Online (Sandbox Code Playgroud)

谁会有任何想法,为什么这可能是?

- - -编辑 - - -

所以我尝试了另一种方法; 而不是使用getExternalFilesDir(null),我尝试使用File basePath = new File(Environment.getExternalStorageDirectory(), "myAppName");

这不是理想的,我知道Android文档说,我同意它,你应该使用getExternalFilesDir().虽然我不得不尝试别的东西,但这看起来并不适合我.这次函数确实返回一个有效的File对象,因此,在上面一行之后,basePath的路径是/ mnt/sdcard/myAppName.到现在为止还挺好.当我用DDMS检查时,我可以看到/ mnt/sdcard存在但不是/ mnt/sdcard/myAppName.这是可以预料的.所以我打电话boolean result = basePath.mkdirs();

但这会返回false,当我检查文件系统时,我可以确认尚未创建myAppName子文件夹.当我通过DDMS手动创建文件夹并将文件放入其中时,我可以从我的应用程序中读取这些文件,但我无法在该文件夹中写入任何内容.

请帮忙!我的智慧结束了.

android

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

match_parent未按预期执行

我想这应该是一个相当容易回答的问题,如果你比我更了解XML布局.在使用match_parent layout_height 时,我似乎没有得到我想的.

我有一个带有android:orientation ="vertical"LinearLayout根元素.在这个LinearLayout里面我想要三个元素: - TextView - ListView - TextView

对于TextViews,我设置了android:layout_height ="wrap_content",这样它们只会显示其显示内容所需的高度.问题是,我希望一个TextView位于窗体的顶部,另一个位于窗体底部,而ListView填充窗体上可用的任何空间.所以这是我的xml布局:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    android:text="Top TextView" />

<ListView
    android:id="@+id/listView_Species"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    android:text="Bottom TextView" />
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这就是我得到的.我已经选择了ListView,以便突出显示它.注意它是如何一直延伸到表单的底部,将底部的TextView从表单中推出. XML布局1

当我将ListView的layout_height属性更改为某个固定值(如180dp)时,这就是表单的样子.我只是发布这个来证明底部的TextView在那里,但我仍然不知道如何将它固定到屏幕的底部,而ListView占用了剩余的空间,但在两个TextView之间.

XML布局2

提前致谢.

android android-linearlayout android-xml xml-layout

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

JSON字符串的交集

我正在尝试找到一种方法来使用一个JSON字符串作为各种"模板"来应用于另一个JSON字符串.例如,如果我的模板如下所示:

{
   "id": "1",
   "options": {
      "leatherseats": "1",
      "sunroof": "1"
   }
}
Run Code Online (Sandbox Code Playgroud)

然后我将其应用于以下JSON字符串:

{
   "id": "831",
   "serial": "19226715",
   "options": {
      "leatherseats": "black",
      "sunroof": "full",
      "fluxcapacitor": "yes"
   }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个结果JSON字符串如下:

{
   "id": "831",
   "options": {
      "leatherseats": "black",
      "sunroof": "full",
   }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能依赖模板和输入是固定格式的,所以我不能编组/解组成定义的接口.

我编写了一个递归函数,遍历模板以构造一个字符串片段,其中包含要包含的每个节点的名称.

func traverseJSON(key string, value interface{}) []string {
    var retval []string
    unboxed, ok := value.(map[string]interface{})
    if ok {
        for newkey, newvalue := range unboxed {
            retval = append(retval, recurse(fmt.Sprintf("%s.%s", key, newkey), newvalue)...)
        }
    } else {
        retval = append(retval, …
Run Code Online (Sandbox Code Playgroud)

string json go

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

构建应用程序时将SQL项目部署到localdb

这可能是一个非常容易回答的问题,但是我在这里浪费时间试图研究愚蠢的小事情,所以我想我只是在这里提出问题。

我在VS2013中有两个项目的解决方案。主项目(启动项目)是一个针对DB的C#Winforms项目,第二个项目是具有该DB架构的SQL项目。

因此,我可以进行更改并构建SQL项目。我可以拍快照,畅游作品。我不能做的是运行该项目(该项目应将其发布到(localdb)调试项目中。如果单击run,它将运行默认的启动项目。

当然,我可以暂时将SQL项目设置为默认启动项目,然后运行,然后将主项目再次设置为默认启动项目。

当然,必须有一种方法可以构建SQL项目并将其立即发布到调试数据库,或者至少如上所述以更简单的步骤发布?

实际上,我最终想要的是如果有一个热键可以构建两个项目,将SQL项目发布到调试数据库并运行主项目。

visual-studio-2013 sql-server-data-tools

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

从原始文件创建swagger.json文件的混乱

我已经创建了一个原型文件,其中包含要生成的REST Web服务的所有必需消息和rpc函数。使用protoc-gen-swagger插件,我已经设法将该原型文件编译为swagger.json文件,并且看起来很不错,除了两件事,我似乎无法解决。

  1. swagger.json文件中的所有定义都有我原型文件包的名称的前缀。有办法摆脱这种情况吗?

  2. 我的邮件的所有字段均为“可选”。没有明确指定它们,但没有指定它们是“必需的”,根据定义,这使它们成为可选的。Proto3不再支持必需/可选/重复,但是即使我使用Proto2并添加了这些关键字,它似乎也不会影响swagger.json输出。如何在proto文件中指定必填字段,以便protoc-gen-swagger将所需部分添加到json输出中?

这是一个非常基本的原始文件的示例:

webservice.proto

syntax = "proto3";
package mypackage;
import "google/api/annotations.proto";

service MyAPIWebService {
    rpc MyFunc (MyMessage) returns (MyResponse) {
        option (google.api.http) = {
            post: "/message"
            body: "*"
        };
    }
}

message MyMessage {
    string MyString = 1;
    int64 MyInt = 2;
}

message MyResponse {
    string MyString = 1;
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令将其编译为swagger.json文件:

协议-I。-I“%GOPATH%/ src / github.com / grpc-ecosystem / grpc-gateway / third_party / googleapis” --swagger_out = logtostderr = true :。webservice.proto

产生以下输出: webservice.swagger.json

{
  "swagger": "2.0",
  "info": {
    "title": …
Run Code Online (Sandbox Code Playgroud)

go protocol-buffers swagger

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

使用(SqlConnection),范围和连接池

我最近才了解到这种连接池机制,发现我编写的SQL连接错误.我过去常常维护一个全局SQL连接,所有SqlCommands这些连接都将执行.

所以我现在正在对现有代码进行大规模更改.有不少于260个SqlCommands引用SqlConnection我正在忙着包装的全局

using (SqlConnection sqlConnection = new SqlConnection(globally_stored_connection_string))
{
    sqlConnection.Open();
    // SqlCommand comes here
}
Run Code Online (Sandbox Code Playgroud)

我认为这仍然是我必须做的一个范式转换,这个关闭连接的业务只是在不久之后打开一个新的,信任连接池来处理开销.考虑到这一点,我现在需要决定如何SqlCommands在循环内多次调用包装.非常感谢您对以下哪些代码段的首选(当然,除此之外还有更多内容,SqlCommands但这些是用来说明问题的简单示例).

选项A:

using (SqlConnection sqlConnection = new SqlConnection(connection_string))
{
    foreach(int number in numberList)
    {
        using (SqlCommand sqlCommand = new SqlCommand("SQL code here using number from foreach loop", sqlConnection))
        {
            sqlConnection.Open();
            sqlCommand.ExecuteNonQuery();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

选项B:

foreach (int number in numberList)
{
    using (SqlConnection sqlConnection = new SqlConnection(connection_string))
    {
        sqlConnection.Open();
        using (SqlCommand sqlCommand = new SqlCommand("SQL …
Run Code Online (Sandbox Code Playgroud)

c# sql sqlconnection

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

SELECT ... WHERE值LIKE'%...%'

我越来越意识到使查询高效的重要性.至关重要的是,我有适当的索引等,以确保我的查询不会占用超过真正必要的IO.但这是一个只是丑陋的查询,我不知道如何使它有效.

假设我有一个库存项目表,其最基本的形式看起来像这样:

CREATE TABLE StockItems (
  ItemID INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
  SerialNo VARCHAR (50) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

现在我需要编写一个存储过程,它将返回序列号与提供的部分序列号匹配的所有库存项目.以下查询将完全实现:

SELECT * FROM StockItems WHERE SerialNo LIKE '%' + @SearchStr + '%'
Run Code Online (Sandbox Code Playgroud)

但是,当我看到这样一个问题时,我突然出现冷汗,紧紧抓住我的舒适毯.没有索引SerialNo,即使有,也没有任何意义,考虑到我正在寻找部分匹配.

有没有办法通过更有效的查询来实现此任务?

sql sql-server

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