小编Suv*_*ica的帖子

findViewById vs ListView适配器中的View Holder Pattern

我总是使用LayoutInflaterfindViewById在一个getView方法中创建新项目Adapter.

但在许多文章中,人们写的findViewById非常慢,强烈建议使用View Holder Pattern.

谁能解释为什么findViewById这么慢?为什么View Holder Pattern更快?

如果需要添加不同的项目,我该怎么办ListView?我应该为每种类型创建类吗?

static class ViewHolderItem1 {
    TextView textViewItem;
}

static class ViewHolderItem2 {
    Button btnViewItem;
}
static class ViewHolderItem3 {
    Button btnViewItem;
    ImageView imgViewItem;
}
Run Code Online (Sandbox Code Playgroud)

android listview android-adapter

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

java.lang.NullPointerException:尝试在空对象引用上调用虚方法

我试图在共享偏好中保存玩家的名字,并通过在共享偏好中再次获取它而使其显示在另一个活动中但我的应用程序崩溃.

致命异议:主要

 Process: plp.cs4b.thesis.drawitapp, PID: 1970
 java.lang.RuntimeException: Unable to start activity ComponentInfo{plp.cs4b.thesis.drawitapp/plp.cs4b.thesis.drawitapp.PlayGame}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Player.getName()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
    at android.app.ActivityThread.access$800(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String plp.cs4b.thesis.drawitapp.Player.getName()' on a null object reference
    at plp.cs4b.thesis.drawitapp.PlayGame.onCreate(PlayGame.java:20)
    at android.app.Activity.performCreate(Activity.java:5933)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
    ... 10 more
Run Code Online (Sandbox Code Playgroud)

代码:

Player.java

public class Player { …
Run Code Online (Sandbox Code Playgroud)

java android nullpointerexception

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

Asynctask vs Thread vs Services vs Loader

我稍微感到困惑之间的差异Asynctask,Thread,Service,Loader在Android系统.

我知道它是如何工作的.但我仍然不明白我应该使用什么以及何时使用.

我使用Android工作了3年,并且通常仍然AsyncTask用于所有后台任务(有时候用于Thread).但是很多人说"Asynctask已经过时了",不建议使用它们.他们还建议使用robospice或Volley.

那么,AsyncTask真的很糟糕,我应该使用框架进行网络任务?我应该将什么用于后台(而不是网络)任务?

multithreading android android-service android-asynctask

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

以.xml或以编程方式设置文本大小

我在dimens.xml上有变量

<resources>
    <dimen name="btn_text_size">12sp</dimen>    
</resources>
Run Code Online (Sandbox Code Playgroud)

我可以在布局文件中使用它:

 <TextView
           android:textSize="@dimen/btn_text_size"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/dialog_tags_complete"
/>
Run Code Online (Sandbox Code Playgroud)

或以编程方式

tagButton.setTextSize(c.getResources().getDimension(R.dimen.tag_text_size));
Run Code Online (Sandbox Code Playgroud)

但是这两种方法给出了不同的结果.我知道这getDimension是基于与资源相关的当前DisplayMetrics.

但是我该怎样做才能使这2种方式看起来一样?

android dimensions

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

为什么我应该在Android中使用匿名类而不是类重新定义?

我是Android开发人员的新手.我读了一些关于它的书.并且所有作者都强烈建议使用匿名类而不是类重新定义.

他们说

TextView txtTitle;
...
txtTitle.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {

   }
});
Run Code Online (Sandbox Code Playgroud)

比...更好

   txtTitle.setOnClickListener(new MyOnClickListener(position));
   ...

private class MyOnClickListener implements OnClickListener{
...
}
Run Code Online (Sandbox Code Playgroud)

谁能解释一下为什么?

Ofc,如果我将重新定义类用于许多不同的对象,这将是修改的问题.

但是如果我只将自己的类用于特定的对象,那么我的类的逻辑不会强烈改变,我可以使用它吗?或者我应该使用匿名课程?

android anonymous-class inner-classes

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

Google Play游戏服务 - 无法登录游戏中心

到目前为止我做的事情:

  1. 在Dev Console(游戏服务)中添加并链接了我的应用程序

  2. 将App_id包含到我的app/manifest中

  3. 将BaseGameActivity和GameHelper添加到我的项目中(来自GitHub)

  4. 将google-play-services库添加到我的项目中

  5. 扩展BaseGameActivity

日志中的ee是什么:

GameHelper: **** APP NOT CORRECTLY CONFIGURED TO USE GOOGLE PLAY GAME SERVICES
 GameHelper: **** This is usually caused by one of these reasons:
 GameHelper: **** (1) Your package name and certificate fingerprint do not match
 GameHelper: ****     the client ID you registered in Developer Console.
 GameHelper: **** (2) Your App ID was incorrectly entered.
 GameHelper: **** (3) Your game settings have not been published and you are 
 GameHelper: ****     trying to log …
Run Code Online (Sandbox Code Playgroud)

android google-play-services google-play-games

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

使用不同的java应用程序导出选项的奇怪行为

我有java服务器应用程序,它使用很多库(netty,guava等).我总是将此应用程序导出为单个.jar.当我在Eclipse中运行应用程序时,我没有任何问题.但是,如果我在控制台(Windows或Ubuntu,无关紧要)启动应用程序,我有一个奇怪的问题:通过套接字的所有连接进程持续太长时间.例如,通过HttpAsync或其他人(rabbitmq连接等)的简单http连接持续1-2分钟.但连接完成后,数据发送/接收速度很快.我无法弄清楚是什么问题.如前所述,我使用Eclipse进行开发.

如您所知,您可以导出项目3方式(在Eclipse中):

  1. 将所需的库提取到JAR中.
  2. 将所需的库打包到JAR中.
  3. 将所需的库复制到JAR旁边的子文件夹中.

所以,当我使用2选项时,我遇到了问题.当我切换到3d选项(main .jar附近的文件夹中的所有.jars)时,问题就解决了.

一般来说,2和3选项之间没有太大的区别(2个所有.jars只在一个jar内).我认为这是从jar开始在执行时加载新类所需的额外时间的原因.但问题不仅发生在开始,而且发生在所有新连接上.

有人可以解释这种行为吗?

UPD: Eclipse Luna.无论我使用什么操作系统(Windows,或Ubuntu),甚至无关紧要jvm(尝试使用不同的Oracle jdk,甚至尝试打开jdk).

java eclipse jvm jar maven

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

Git克隆挂在Ansible中

我尝试过的:

1)将私钥从本地计算机复制到服务器并使用它进行克隆:

- name: clone repo
  sudo: yes
  git: repo={{ app_repo }} dest={{ app_repo_dir }} accept_hostkey=true key_file={{ssh_key}} version=master force=yes
Run Code Online (Sandbox Code Playgroud)

但它挂起了.据我所知,这个问题发生'因为密钥有密码.

2)ForwardAgentansible.cfg中使用:

[ssh_connection]
ssh_args = -o ForwardAgent=yes
Run Code Online (Sandbox Code Playgroud)

但是为了连接到服务器,我使用的不是标准的ssh 22端口.

如何git clone在Ansible中为密钥任务设置密码?或者使用Ansible克隆远程存储库的任何其他方法?

PS是的,我可以尝试从密钥中删除密码.但安全方面......

git ssh ansible

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

创建新用户时Smack XMPP错误:禁止 - 身份验证

我正在尝试通过管理员帐户创建新用户.但是我收到了auth错误.我试着像回答这个,但它并不能帮助.

我创建新用户的代码:

AccountManager accountManager = AccountManager.getInstance(mConnection);

        if (accountManager.supportsAccountCreation()) {
            try {
                accountManager.createAccount(username, password);
            }

            catch (XMPPException ex) {
                LOG.info(ex.getMessage(), ex);
            }

        }
        else{
            LOG.error("Server doesn't support creating new accounts");
        }
Run Code Online (Sandbox Code Playgroud)

我允许在配置中注册ALL:

{access, register, [{allow, all}]}.

{access, register_from, [{allow, all}]}.

{mod_register, [
 ...
 {ip_access, [{allow, "127.0.0.0/8"},
              {deny, "0.0.0.0/0"}]},
 {access_from, register_from},
 {access, register}
]},
Run Code Online (Sandbox Code Playgroud)

即使有这个配置我有错误:

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: forbidden - auth
    at org.jivesoftware.smack.XMPPException$XMPPErrorException.ifHasErrorThenThrow(XMPPException.java:135)
    at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)
    at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:213)
    at org.jivesoftware.smackx.iqregister.AccountManager.createAccount(AccountManager.java:272)
    at org.jivesoftware.smackx.iqregister.AccountManager.createAccount(AccountManager.java:244)
Run Code Online (Sandbox Code Playgroud)

PS Smack 4.1.0

java xmpp smack mongoose-im

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

温斯顿日志中的奇怪符号

初始化:

var winston = require('winston');
var logger = new (winston.Logger)({
    levels: {
        trace: 0,
        input: 1,
        verbose: 2,
        prompt: 3,
        debug: 4,
        info: 5,
        data: 6,
        help: 7,
        warn: 8,
        error: 9
    },
    colors: {
        trace: 'magenta',
        input: 'grey',
        verbose: 'cyan',
        prompt: 'grey',
        debug: 'blue',
        info: 'green',
        data: 'grey',
        help: 'cyan',
        warn: 'yellow',
        error: 'red'
    }
});

logger.add(winston.transports.Console, {
    level: 'error',
    prettyPrint: true,
    colorize: true,
    silent: false,
    timestamp: false,
    json: false
});
Run Code Online (Sandbox Code Playgroud)

例如,我这样称呼记录器:

logger.info("isSandBox: " + isSandBox);
Run Code Online (Sandbox Code Playgroud)

在我的想法中,我看到:

信息:isSandBox:真实

但是当我将此脚本上传到 …

node.js winston

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