小编Che*_*eng的帖子

正确的方法获得最负面的双重

这是获取Java中最负面双重的正确方法吗?

double v = -Double.MAX_VALUE;
Run Code Online (Sandbox Code Playgroud)

java

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

在Android应用程序中使用TypedArray

我遇到了代码

HelloGallery示例

ImageAdapter.java - http://developer.android.com/resources/tutorials/views/hello-gallery.html

TypedArray a = obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = a.getResourceId(
        R.styleable.HelloGallery_android_galleryItemBackground, 0);
a.recycle();
Run Code Online (Sandbox Code Playgroud)

attrs.xml - http://developer.android.com/resources/tutorials/views/hello-gallery.html

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="HelloGallery">
        <attr name="android:galleryItemBackground" />
    </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)

并且代码:

蛇游戏示例

TileView.java - http://developer.android.com/resources/samples/Snake/src/com/example/android/snake/TileView.html

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TileView);
mTileSize = a.getInt(R.styleable.TileView_tileSize, 12);
a.recycle();
Run Code Online (Sandbox Code Playgroud)

attrs.html - http://developer.android.com/resources/samples/Snake/res/values/attrs.html

<resources>
  <declare-styleable name="TileView">
    <attr name="tileSize" format="integer" />
  </declare-styleable>
</resources>
Run Code Online (Sandbox Code Playgroud)
  1. 我可以知道他们为什么需要从XML获取整数值吗?他们为什么不只是编码mGalleryItemBackground = 0;而且mTileSize = 12;?我的猜测是,他们希望能够在不触及Java代码的情况下改变一些东西.但是,我没有看到XML文件本身明确指定任何值.用于演示TypedArray和context.obtainStyledAttributes目的的代码示例非常有用.
  2. 两者都试图读取整数.为什么其中一个例子是使用getResourceId技术,另一个是使用getInt技术?
  3. 我指的是TypedArray JavaDoc,但我很难理解它是什么recycle

返回先前检索的StyledAttributes,以供以后重复使用.

android

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

使用Fragment的setRetainInstance(true)确实是处理旋转变化的好方法

我指的是为什么使用Fragment #setRetainInstance(boolean)?

我之所以这么说是为了Activity处理轮换,官方活动文档鼓励我们Activity在轮换期间关闭并重启.

android:configChanges列出活动将自行处理的配置更改.在运行时发生配置更改时,默认情况下会关闭并重新启动活动,但声明具有此属性的配置将阻止活动重新启动.相反,活动仍在运行,并调用其onConfigurationChanged()方法.注意:应避免使用此属性,并仅将其用作最后的手段.有关如何通过配置更改正确处理重新启动的详细信息,请阅读处理运行时更改.

任何尝试更改此活动默认行为似乎都是不好的做法.为避免Activity在重新启动期间重新加载耗时的数据结构,我们使用onRetainNonConfigurationInstancegetLastNonConfigurationInstance.- 官方处理运行时更改

但是,当在Fragment中处理轮换时,谷歌会给我们不同的推荐吗?他们不希望我们关闭并重启Fragment?

public Object onRetainNonConfigurationInstance()

此方法在API级别13中已弃用.请改用新的Fragment API setRetainInstance(boolean); 这也可以通过Android兼容包在旧版平台上使用.

  1. 为什么Google鼓励我们在轮播期间关闭并重新启动Activity,但是鼓励我们在轮换期间保留Fragment?
  2. 如果setRetainInstance(true)处理轮换效果不错,为什么Google不将其作为Fragment的默认行为?

android

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

如何实现平滑的展开/折叠动画

我指的是这里的扩展/折叠动画代码.

Android:展开/折叠动画

虽然它有效,但它不能很好地完成工作.动画不流畅.

我做了一些登录代码.

public static void expand(final View v) {
    v.measure(MeasureSpec.makeMeasureSpec(((View)v.getParent()).getWidth(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(1024, MeasureSpec.AT_MOST));
    final int targtetHeight = v.getMeasuredHeight();

    v.getLayoutParams().height = 0;
    v.setVisibility(View.VISIBLE);
    Animation a = new Animation()
    {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            v.getLayoutParams().height = interpolatedTime == 1
                    ? LayoutParams.WRAP_CONTENT
                    : (int)(targtetHeight * interpolatedTime);
            Log.i("CHEOK", "E v.getLayoutParams().height = " + v.getLayoutParams().height);
            v.requestLayout();
        }
Run Code Online (Sandbox Code Playgroud)

将打印以下日志消息.

10-09 12:29:58.808: I/CHEOK(7874): E v.getLayoutParams().height = 0
10-09 12:29:58.808: I/CHEOK(7874): E v.getLayoutParams().height = 0
10-09 12:29:58.918: I/CHEOK(7874): E v.getLayoutParams().height = 11 …
Run Code Online (Sandbox Code Playgroud)

animation android

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

短路评估是否在C++中得到保证,就像在Java中一样?

在Java中,我使用

if (a != null && a.fun());
Run Code Online (Sandbox Code Playgroud)

通过充分利用短路评估和表达从左到右进行评估?

在C++中,我可以这样做吗?它们是否保证可以跨不同平台和编译器移植?

if (a != 0 && a->fun());
Run Code Online (Sandbox Code Playgroud)

c++ java

26
推荐指数
2
解决办法
9141
查看次数

完成使用后我是否需要调用HttpURLConnection.disconnect

以下代码基本上按预期工作.然而,为了偏执,我想知道,为了避免资源泄漏,

  1. HttpURLConnection.disconnect完成使用后我需要打电话吗?
  2. 我需要打电话InputStream.close吗?
  3. 我需要打电话InputStreamReader.close吗?
  4. 我是否需要具有以下2行代码:httpUrlConnection.setDoInput(true)并且httpUrlConnection.setDoOutput(false),在构建httpUrlConnection之后?

我这么说的原因是,我看到的大部分例子都没有做过这样的清理.http://www.exampledepot.com/egs/java.net/post.htmlhttp://www.vogella.com/articles/AndroidNetworking/article.html.我只是想确保这些例子也是正确的.


public static String getResponseBodyAsString(String request) {
    BufferedReader bufferedReader = null;
    try {
        URL url = new URL(request);
        HttpURLConnection httpUrlConnection = (HttpURLConnection)url.openConnection();
        InputStream inputStream = httpUrlConnection.getInputStream();
        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        int charRead = 0;
        char[] buffer = new char[1024];
        StringBuffer stringBuffer = new StringBuffer();
        while ((charRead = bufferedReader.read(buffer)) > 0) {
            stringBuffer.append(buffer, 0, charRead);
        }
        return stringBuffer.toString();
    } catch (MalformedURLException e) …
Run Code Online (Sandbox Code Playgroud)

android

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

Google Drive API无法与ProGuard(NPE)配合使用

目前,我有经验,使用Google Drive API的一段代码在没有引入ProGuard的情况下运行正常.

但是,在引入ProGuard之后,我遇到了以下运行时错误.

    at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NullPointerException
    at com.google.api.client.util.Types.getActualParameterAtPosition(Types.java:329)
    at com.google.api.client.util.Types.getIterableParameter(Types.java:309)
    at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:546)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:350)
    at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:586)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:289)
    at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:76)
    at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:71)
    at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:491)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:456)
    at com.jstock.c.b.a(CloudFile.java:136)
Run Code Online (Sandbox Code Playgroud)

请注意,崩溃发生在我的代码中(如果我使用mapping.txt进行回溯,则为com.jstock.cba)

// request is Files.List
FileList files = request.execute();
Run Code Online (Sandbox Code Playgroud)

在我的项目中,我认为有以下两个关键指令,能够防止崩溃发生:我告诉ProGuard永远不要触及jackson和Google库.

-keep class org.codehaus.** { *; }
-keep class com.google.** { *; }
-keep interface org.codehaus.** { *; }
-keep interface com.google.** { *; }
Run Code Online (Sandbox Code Playgroud)

但这不起作用.NPE仍然发生在Types.java上

请注意,我还有另一种尝试是,我认为混淆过程会导致NPE发生.因此,我尝试使用它来禁用它-dontobfuscate.但这一次,我将无法生成APK文件,并得到一个流行的错误消息:转换为Dalvik格式失败,错误1

以下是在Google Drive API中导致NPE的proguard配置.

-optimizationpasses 1 …
Run Code Online (Sandbox Code Playgroud)

android google-api proguard google-api-java-client google-drive-api

26
推荐指数
2
解决办法
5679
查看次数

如何在客户端或池之间选择节点postgres

https://node-postgres.com/features/connecting,似乎我们可以选择PoolClient执行查询

pool.query('SELECT NOW()', (err, res) => {
  console.log(err, res)
  pool.end()
})
Run Code Online (Sandbox Code Playgroud)
client.query('SELECT NOW()', (err, res) => {
  console.log(err, res)
  client.end()
})
Run Code Online (Sandbox Code Playgroud)

它们的功能看起来非常相似.但是,文档并没有解释Pool和之间的差异Client.

可我知道,我应该考虑什么东西,之间做选择之前Pool还是Client

node.js node-postgres

26
推荐指数
2
解决办法
8059
查看次数

选择文件后立即POST

我有以下HTML代码

<form action="/script/upload_key.py" method="POST" enctype="multipart/form-data"> 
    Key filename: <input name="file_1" type="file"> 
    <input name="submit" type="submit"> 
</form> 
Run Code Online (Sandbox Code Playgroud)

这给了我以下的东西.

替代文字

我在想

  1. 我如何使用JavaScript,以消除Submit按钮的需要.这意味着,一旦我Choose File,所选文件将立即上传?
  2. 如何确保显示所选文件名的字段足够长,以便...不会显示?

html javascript

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

我们真的应该在onActivityCreated中调用getLoaderManager().initLoader,这会导致onLoadFinished被调用两次

Google建议我们getLoaderManager().initLoader(0, null, this);在Fragment中进行调用onActivityCreated

http://developer.android.com/reference/android/content/AsyncTaskLoader.html

但是,这会产生以下问题:在配置更改期间将调用onLoadFinished两次(旋转)

我们可以按如下方式模拟问题.

package org.yccheok.gui;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.actionbarsherlock.app.SherlockFragment;

public class HomeMenuFragment extends SherlockFragment implements LoaderManager.LoaderCallbacks<HomeMenuFragment.Infos> {
    private static class InfosLoader extends AsyncTaskLoader<Infos> {

        private Infos infos = null;

        public InfosLoader(Context context) {
            super(context);
        }

        @Override
        public Infos loadInBackground() {
            Log.i(TAG, "loadInBackground");

            this.infos = Infos.newInstance();
            return infos;
        }

        /**
         * Handles a request to cancel a …
Run Code Online (Sandbox Code Playgroud)

android

24
推荐指数
2
解决办法
8407
查看次数