小编Chr*_*ris的帖子

多个推送消息:适配器的内容已更改,但ListView未收到通知

当我在1秒钟内从GCM收到大量推送消息(假设为50)时,我收到以下异常:

java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知.确保不从后台线程修改适配器的内容,而只是从UI线程修改.[在ListView(2131427434,类android.widget.ListView)中使用Adapter(类an)]在android.widget.List.layoutChildren(ListView.java:1544)在android.widget.AbsListView.onLayout(AbsListView.java:2045)在Android.widget上的android.view.View.layout(View.java:14255)android.view.Linout.setChildFrame(LinearLayout.java:1670)的android.view.ViewGroup.layout(ViewGroup.java:4413). LinearLayout.layoutVertical(LinearLayout.java:1528)位于android.view.View. Layout(View.java:14255)的android.view.Linout.onLayout(LinearLayout.java:1441)android.view.ViewGroup.layout(ViewGroup) .java:4413)在Android.view.ViewGroup.layout(ViewGroup.java:4413)android.view.View.layout(View.java:14255)的android.support.v4.view.ViewPager.onLayout(未知来源)在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670)的android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528)android.widget.LinearLayout.onLayout(LinearLayout.java:1441)android.view .View.layout(VIE w.java:14255)在android.view.View.lay(View.java:的android.sview.v4上,android.view.vout.Douter.onLayout(未知来源)的android.view.ViewGroup.layout(ViewGroup.java:4413) 14255)在android.view.Loutout(MapLayout.java:446)的android.view.View.Loutout(View.java:1425)android的Android.view.View.Loutout(FrameLayout.java:446)的android.view.ViewGroup.layout(ViewGroup.java:4413).在android.view上的android.view.View.layout(View.java:14255)的android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(未知来源)中查看.ViewGroup.layout(ViewGroup.java:4413).位于android.view.View.Loutout(ViewLayout.java:446)的android.view.Loutout(ViewLayout.java:446)处于android.view.View.layout(View.java:14255)处的ViewGroup.layout(ViewGroup.java:4413) .java:4413)在Android.widget.LinearLayout.ayLayout(LinearLayout.java:1441)上的android.widget.LinearLayout.setChildFrame(LinearLayout.java:1670)android.widget.LinearLayout.layoutVertical(LinearLayout.java:1528)在android.vi上的android.view.View.layout(View.java:14255)ew.ViewGroup.layout(ViewGroup.java:4413)位于android.view.View.Viewout.Loutout(ViewLayout.java:446),位于android.view.View.layout(View.java:14255),位于android.view.ViewGroup.layout (ViewGroup.java:4413)在Android.view.ViewRootImpl.exeTraversals(ViewRootImpl.java:1812)的android.view.ViewRootImpl.exeTransals(ViewRootImpl.java:1899)上的android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1998)(ViewRootImpl.java: 1050)在Android.view.ChoreIs上的android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:4560),在android.view.Choreographer.doCallbacks(Choreographer.java:562)的android.view.Choreographer $ CallbackRecord.run(Choreographer.java:749) )在Android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:735)的android.view.Horeler.handleCallback(Handler.java:725)android.view.Choreographer.doFrame(Choreographer.java:532)位于android.app.Looper.loop(Looper.java:137)的.os.Handler.dispatchMessage(Handler.java:92)位于java.lang.reflect的android.app.ActivityThread.main(ActivityThread.java:5171).中号 在com.android的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:797)的java.lang.reflect.Method.invoke(Method.java:511)中的ethod.invokeNative(Native Method).在dalvik.system.NativeStart.main(Native方法)的internal.os.ZygoteInit.main(ZygoteInit.java:564)

我已经尝试解决这个问题,通过把两个messages.add()notifyDataSetChanged()里面的runOnUIThread.我想这onUpdate()是因为每个推送消息都会调用我的监听器.但不应该解决这个问题runOnUIThread(),因为一切都是连续执行的?

    MainApplication app = (MainApplication) context.getApplicationContext();
    app.setOnRoomMessageUpdateListener(new OnRoomMessageUpdateListener() {
        @Override
        public void onUpdate() {
            // save message with highest time, so we can only query the new
            // messages
            long highestTime = getHighestMessageTime();

            messageDatabase.getConditionBuilder().add(
                    DatabaseHelper.KEY_MESSAGE_ROOM_ID + " = ? AND " + DatabaseHelper.KEY_MESSAGE_LOCAL_TIME
                            + " > ? AND …
Run Code Online (Sandbox Code Playgroud)

android android-listview google-cloud-messaging

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

在ViewHolder模式的适配器中使用动画

在我的适配器中使用动画时遇到问题.

@Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(resource, parent, false);
            holder = new ViewHolder();

            holder.newRoomView = (TextView) convertView.findViewById(R.id.newRoom);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Room item = items.get(position);

        // animate new rooms
        if (item.isNewRoom()) {
            AlphaAnimation alphaAnim = new AlphaAnimation(1.0f, 0.0f);
            alphaAnim.setDuration(1500);
            alphaAnim.setAnimationListener(new AnimationListener() {
                public void onAnimationEnd(Animation animation) {
                    holder.newRoomView.setVisibility(View.INVISIBLE);
                }

                @Override
                public void onAnimationStart(Animation animation) {}

                @Override
                public void onAnimationRepeat(Animation …
Run Code Online (Sandbox Code Playgroud)

android

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

带有node.js的Firebase存储/存储桶公共上传

码:

var storage = require('@google-cloud/storage');
var gcs = storage({
    projectId: config.google.projectId,
    keyFilename: config.google.keyFilenameFirebase
});

var bucket = gcs.bucket('project-id.appspot.com');
var destination = 'uploads/12345/full.jpg';

bucket.upload(myFile, { public: true, destination: destination }, function(err, file) {
    if (err) {
        console.log(err);
    }
});
Run Code Online (Sandbox Code Playgroud)

我的文件已成功上传到我的firebase存储,但是:

  1. 该文件现在可通过网址公开访问:https: //porage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg.我可以在我的应用程序中使用此固定URL,还是可能会更改或过期?
  2. public: true 似乎打破了Firebase存储UI:

在此输入图像描述 未显示右侧图像的预览,我无法通过下载按钮下载图像.此外,没有下载网址(我不介意,因为我可以通过上面的链接访问它)和点击"创建新的下载URL"Firebase产量

生成下载URL时出错

删除public: true预览时显示正确,我也可以生成下载URL.但公共网址 https://storage.googleapis.com/project-id.appspot.com/uploads/12345/full.jpg将不再适用,这对我来说是必要的.

所以我的计划是坚持public: true,但它仍然让我感到困惑,预览/下载按钮不起作用,它看起来像Firebase中的一个错误.任何人都可以证实吗?

google-cloud-storage firebase firebase-storage

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

源文件更改后,Minify返回白页

Minify对我来说很好,但在更改其中一个源文件后,我会收到一个白色的空白页面.刷新页面不会改变任何内容.没有缓存的刷新(Strg + F5)解决了这个问题.在没有缓存的一次刷新之后,我可以通过缓存重新刷新并且它可以工作.

URL im调用如下所示:

开发/分钟/ min.php/JS?类型= JS&SRC%5B0%5D = ewOutlibs%2Fjquery.min.js&SRC%5B1%5D = ewOutlibs%2Fcookie%2Fjquery.cookie.js

min.php

<?php
define('MINIFY_MIN_DIR', dirname(__FILE__));

// load config
require MINIFY_MIN_DIR . '/config.php';

// autoload
require $min_libPath . "/Minify/Loader.php";
Minify_Loader::register();

// caching
Minify::setCache(
    isset($min_cachePath) ? $min_cachePath : ''
    ,$min_cacheFileLocking
);

// get files to merge
$aSrc = $_GET['src'];

// replace shortened url with long url
if (isset($_GET['type']) && $_GET['type'] === 'js') {
    $aSrc = str_replace('ewOut', '//out/xxx/src/js/', $aSrc);
}

// build array
$aSources = array(
    'files' => $aSrc,
    'maxAge' => …
Run Code Online (Sandbox Code Playgroud)

php minify

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

create-react-app CSS和JS路径

运行后创建应用程序做出反应npm run build,所创建的index.html这个样子的:

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>React App</title><link rel="shortcut icon" href="/favicon.ico"><link href="/main.e606e04b6e0092a87205a9dc4662479c.css" rel="stylesheet"></head><body><div id="root"></div><script type="text/javascript" src="/main.35180d284d8a2058f717.js"></script></body></html>
Run Code Online (Sandbox Code Playgroud)

两者scriptlink src/ - href属性都指向了错误的方向./应删除前导,因为所有生成的文件都在同一目录中.这是一个错误还是我能以某种方式配置这些路径?

reactjs

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

在PHP中舍入整数到最接近的5的倍数

搜索函数ro将数字舍入到最接近的5的倍数

22 -> 20
23 -> 25
40 -> 40
46 -> 45
48 -> 50
Run Code Online (Sandbox Code Playgroud)

等等.

试过这总是返回更高的价值:

5 * ceil($n / 5);
Run Code Online (Sandbox Code Playgroud)

php rounding

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

node.js性能优化和单线程架构

我正在运行带有express的Node.js应用程序,并希望开始提高其性能.定义了几条路线.我们有一个基本的例子:

app.get('/users', function (req, res) {
    User.find({}).exec(function(err, users) {
        res.json(users);
    }
});
Run Code Online (Sandbox Code Playgroud)

假设我们有3个客户端A,B和C,他们试图使用这条路线.他们的请求以A,B,C的顺序到达服务器,两者之间有1毫秒的差异.

1.如果我正确理解了node.js架构,那么每个请求都会被立即处理,因为它Users.find()是异步的并且有非阻塞代码?

让我们用同步调用展开这个例子:

 app.get('/users', function (req, res) {
        var parameters = getUserParameters();

        User.find({parameters}).exec(function(err, users) {
            res.json(users);
        }
    });
Run Code Online (Sandbox Code Playgroud)

相同的请求,相同的订单.getUserParameters()完成需要50毫秒.

2. A将进入路由回调函数并阻塞node.js线程50毫秒.B和C将无法进入该功能并且必须等待.当A完成时getUsersParameters(),它将继续异步User.find()功能,B现在将进入路由回调函数.C仍然需要等待50多毫秒.当B进入异步功能时,可以最终处理C的请求.合在一起:C必须等待50毫秒才能完成A,50毫秒需要B完成,50毫秒才能完成(为简单起见,我们忽略了异步功能的等待时间)?

现在假设我们还有一个路由,只有管理员可以访问,并且每分钟都会通过crontab调用.

app.get('/users', function (req, res) {  
    User.find({}).exec(function(err, users) {
        res.json(users);
    }
});

app.get('/admin-route', function (req, res) {
    blockingFunction(); // this function takes 2 seconds to complete
});
Run Code Online (Sandbox Code Playgroud)

3.当请求X命中admin-route并被blockingFunction()调用时,A,B和C将/users在X的请求之后立即呼叫,必须等待2秒,直到它们甚至进入路由回调函数?

4.我们是否应该将每个自定义函数(即使只需要4毫秒)作为具有回调的异步函数?

node.js

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

PHP与节点REST-API

我正在构建一个简单的REST-API,它有一个端点,它将被大量渗透.我们称之为POST /message.我必须决定使用Node还是PHP.数据库是MySQL.

在此路由中发生的事情: - 通过HTTP-Auth的凭据将通过从数据库中读取来检查. - 请求另一个REST-API. - 将执行另一个写入数据库操作.

因此,有2个数据库连接和另一个REST-API的http请求.路线应该都是关于速度的.我会选择PHP,因为当前的系统基于PHP,但是路由中的请求让我感到害怕,因为在使用PHP时它不是异步的.我不关心这个请求的结果,在节点中我可以只检查凭据并返回success,异步发送请求并在请求返回后执行数据库写入性能.我不认为我可以在PHP中这样做,因为当我返回REST调用时success,一切都必须在之前完成,对吧?

去PHP还是节点?

php api rest node.js

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

FB.login()没有要求给定的权限

登录正在运行,但它只询问基本权限,并且在取消或完成对话时没有触发警报.

 window.fbAsyncInit = function() {

    // init the FB JS SDK
    FB.init({
      appId      : 'XXX', // App ID from the App Dashboard
      channelUrl : 'XXX', // Channel File for x-domain communication
      cookie     : true, // set sessions cookies to allow your server to access the session?
      xfbml      : true,  // parse XFBML tags on this page?
      frictionlessRequests: true,
      oauth: true
    });

     FB.login(function(response) {
       if (response.authResponse) {
         alert("ok");
       } else {
        alert("canceled");
       }
     }, {scope:'publish_actions,publish_stream'});

  };
Run Code Online (Sandbox Code Playgroud)

javascript facebook

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

android:layout_below没有正常工作

我有RelativeLayout三个观点.两者都TextViews应该在右侧,ImageView而秒应该在第一个之下TextView.

码:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#bdbdbd"
    android:paddingBottom="15dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="15dp" >

    <ImageView
        android:id="@+id/avatar"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:layout_centerVertical="true"
        android:src="@drawable/default_avatar" />

    <TextView
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/avatar"
        android:text="Chris"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/university"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/username"
        android:layout_toRightOf="@id/avatar"
        android:text="Oxford"
        android:textSize="13sp" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

android:layout_centerVertical="true"从第一个TextView中删除后,一切都按预期工作(除了它不垂直). 在此输入图像描述

为什么这样,我怎样才能使第一个TextView垂直居中?

android

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