亚洲城娱乐接口书写问题

( 亚洲城娱乐 )

我的接口是这样子的,有返回的时候,json里面的data才会有值,不然就会是一个空字符串

同事跟我说,他接收的时候,data是用json转成对象去取,然后如果data是空,他整个程序就爆掉了,要么我data返回null,不能返回空。我就搞不明白真的是这样子吗

难道不用判断code值的吗?

确实是这样你原本的data是个对象,这里变成了数组他没做处理就会挂掉,你可以 $info['data'] = new stdClass();//返回空对象
作为一个服务端我觉得应该对字段类型敏感处理。

你同事是不是用了框架去解析的json,让他手动解析一遍就好了。不要用框架。
不然框架不能判断data里面的[]这个是个空对象。
当然也可以在解析前判断一下code的值。

如果客户端代码写的不好的话,确实会这样。这锅甩给你了,要是你比他牛,你就甩回去;不然的话,接锅吧。。。

一般客户端都会使用类似于gson的框架去解析服务端返回的json数据,而数据格式是需要提前定义的。data既然是一个对象,那你就用对象的默认值null,我觉得这个需求也挺正常的。

我觉得这个就是,看谁好改 就谁改的问题啊 ~~
我觉得你说的也有道理,一般我同事他怎么给我方便返,我就怎么取。然后自己在做处理。
当然,具体问题具体分析吧~~

我觉得判断code的值比较好

作为API, 同一字段应该返回相同数据类型。
但是如果解决问题的话,使用code 也可以。
所以,如果在开发中就改接口,如果已经上线了,还是改接口。

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…

yzc261亚洲城官网备用地址Xamarin Jar Binding Library编译出错

( yzc261亚洲城官网备用地址 )

我新建了一个Jar Binding Library工程引入了一个Jar包,编译的时候报了如下的问题


我查官方文档说要在Metadata.xml里面加一句话我在里面加了如下的语句


但是编译还是出错,这个Jar包的属性我也调整成

请教各位大神

<add-node path="/api/package/class[implements[@name='java.lang.Comparable']]">
    <method name="compareTo" return="int" abstract="false" native="false" synchronized="false" static="false"
            final="false" deprecated="not deprecated" visibility="public">
      <parameter name="o" type="java.lang.Object" />
    </method>
  </add-node>

metadata.xml里面加这么一句话就ok了

(看完/读完)这篇文章有何感想! yzc261亚洲城官网备用地址的分享…

yzc261亚洲城官网备用地址okhttp3 上传报internal server error

( yzc261亚洲城官网备用地址 )

我在用okhttp3上传照片带参数时,内容大于4M上传不成功,在onResponse的回调里,response的message显示internal server error,这是服务器的问题还是客户端的问题啊?

internal server error明显是服务器问题
建议试试直接上传确定服务器接口是否正常

(看完/读完)这篇文章有何感想! yzc261亚洲城官网备用地址的分享…

yzc261亚洲城官网备用地址Android studio导入老版本的2048项目报错

( yzc261亚洲城官网备用地址 )

Android studio导入一个2048的项目

网上搜了下

方法一改了没反应
方法二改了以后
我又去百度
告诉我
这个的版本改旧一点,改成2.0.0,试了还是没用

在app/build.gradle

改下这一行
minSdkVersion 7

(看完/读完)这篇文章有何感想! yzc261亚洲城官网备用地址的分享…

亚洲城娱乐java.lang.IllegalStateException求指导

( 亚洲城娱乐 )

测试同学跑Monkey跑出了这个异常导致的crash,对应的Android版本是Android6.0。
补充:出问题的Activity是使用了ViewPager无限循环展示图片,内容是ImageView,不是Fragment。
但是我的应用中没有用到任何Fragment,任何commit方法。详细Log如下:

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1438)
    at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:581)
    at android.app.Activity.onBackPressed(Activity.java:2537)
    at android.app.Activity.onKeyUp(Activity.java:2511)
    at android.view.KeyEvent.dispatch(KeyEvent.java:2695)
    at android.app.Activity.dispatchKeyEvent(Activity.java:2764)
    at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2384)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4687)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4643)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4155)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4208)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4174)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4320)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4182)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4377)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4155)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4208)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4174)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4182)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4155)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4208)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4174)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4353)
    at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4523)
    at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2336)
    at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1940)
    at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1931)
    at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2313)
    at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
    at android.os.MessageQueue.nativePollOnce(Native Method)
    at android.os.MessageQueue.next(MessageQueue.java:328)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:5811)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:734)

在StackOverFlow上搜到了类似的问题:http://stackoverflow.com/ques…

StackOverFlow上说要重写onSaveInstaceState方法,去掉super调用,但是我不清楚这样做是否存在负作用,所以希望有经验的人指导一下如何解决这个问题。

我已经找到方法规避该问题,先自问自答一下。

问题原因:在使用了support-v4包中ViewPager的Activity,由于Android系统历史问题,会导致onSaveInstaceState方法调用时机出现不确定性。而onSaveInstaceState方法中会调用FragmentMananger的saveAllState方法。如果这个调用时机出现在onBackPressed方法之前,在onBackPressed方法中会判断是否已经存在saveAllState的行为,如果存在就抛出IllegalStateException。

解决方法:既然知道方法的原因,当然也就有了对应的解决方案。

方案1(也是我采用的方式)——重写onBackPressed方法:

@Override
public void onBackPressed() {
    finish();
}

方案二(参考StackOverFlow上的做法)——重写onSaveInstanceState方法:

@Override
protected void onSaveInstanceState(Bundle outState) {
    //No call for super(). Bug on API Level > 11.
}

两种方法各有弊端,建议更清楚该问题的同学来回答一下这个问题,我抛砖引玉了。

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…

yzc261亚洲城官网备用地址自己 app 如何把 坐标 地址 传给 高德导航并 打开 高德导航app

( yzc261亚洲城官网备用地址 )

自己app 里面有很多店铺,点击店铺地址后,需要 打开 外部的 高德导航,并把地址 传给 高德导航

有大神可以指导一下吗

这种技术可以使用deeplink实现。具体你可google deeplink 或者 applink

有些介绍可以看这里deeplink

要打开外部地图,最简单的是用URI的方式,百度和高德都支持URI打开,详细参考高德开放平台。

使用open url,高德地图的是

iosamap://navi?sourceApplication=%@&backScheme=%@&lat=%f&lon=%f&dev=0&style=2",@"导航功能",@"你的APP的scheme"

(看完/读完)这篇文章有何感想! yzc261亚洲城官网备用地址的分享…

yzc261亚洲城官网备用地址Android 如果想要在要登录的时候,做弹出框,是做dialog好还是做一个透明主题的activity好?考虑到后面的联动.

( yzc261亚洲城官网备用地址 )

项目需求是:在没有登录的时候点击我的界面,弹出登录框,输入后请求判断是否为已注册用户,如不是则直接注册然后跳到设置密码界面,若是就直接跳到输入验证码界面,输入后登录.以上皆为弹出框的样式的.

这种情况下,考虑到登陆之后要显示用户的相关数据的话,自觉应该是activity比较合适的.
大神有什么好的方案求指教!!

我觉得采用dialog样式的activity,parent="@android:style/Theme.Dialog",可以利用activity的生命周期做很多事情

使用Dialog无法控制好生命周期,使用Dialog样式的Activity不能很好控制对话框样式,建议使用DialogFragment,这是带有Dialog的Fragment,你可以在xml文件中控制他的样式。同时也可以更好将UI和逻辑分开(使用回调)

简单的用Dialog,需求复杂的用Activity,Activity更加灵活,啥都能实现

逻辑较多,使用DialogFragment更好点,代码层次也会清晰点。

个人认为使用dialog样式的Activity好些。我用的这个https://segmentfault.com/a/11…

(看完/读完)这篇文章有何感想! yzc261亚洲城官网备用地址的分享…

www.yzc261.com初入RX,有一个需求不知道咋写?

( www.yzc261.com )

需求是这样的:我需要开启一个定时器A,当A定时到50秒的时候,开始开启第二个定时器B,A结束,B开始倒数10秒,每一秒发出一个通知:
然后,我用RX这样做了:

Observable<Long> observable =
                Observable
                        .timer(50, TimeUnit.SECONDS)
                        .repeat(10)
                        .delay(1,TimeUnit.SECONDS);

        subscription = observable
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(aLong -> {
                    //发通知倒计时
                    Log.e("note","flag");
                });

想了半天,好像没啥问题,但是跑起来就有问题了,发现,50秒时挺准的,然后到了第二个定时器,也就是.repeat(10),最后打印的,按照理想,应该是每隔一秒打印,但是实际上相隔了好多秒!。。。
找了半天也没找出啥,难道是我理解错误这几个操作符了?求救大神!

1.repeat是重复,不是间隔固定时间进行重复,间隔固定时间的,用interval
2.delay是延迟发布,在repeat之后加delay,是在延迟后重复,而不是按delay参数进行间隔重复
3.解决方案是用 interval,可以指定初始延迟,重复间隔,再加上take和map操作,取前10个并转换成倒计时

Observable.interval(50, 1, TimeUnit.SECONDS)//延迟50s,然后每1秒重复
          .take(10)//取10个
          .map(aLong -> 10 - aLong)//转换成倒计时
          .subscribe(YOUR_ACTION);

尚未找出原因,但我找到一个替代版本:

/**
     * 倒计时,倒计 time 秒
     * @param time  单位:秒
     * @return  Observable
     */
    public static Observable<Integer> countDown(int time) {
        if (time < 0) time = 0;
        final int countTime = time;
        return Observable.interval(0, 1, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.newThread())
                .map(increaseTime -> countTime - increaseTime.intValue())
                .take(countTime + 1);
    }

这是一个倒计时,然后,在前面加上延时就可以了:

private final static int TheMaxRecordTime = 60;     //最大录音时长:秒
private final static int NoteUserRecordTime = 10;   //剩余多少秒开始提示用户
 Observable<Integer> observable = Observable
                .timer(TheMaxRecordTime-NoteUserRecordTime+2, TimeUnit.SECONDS)
                .flatMap((aLong -> RxUtils.countDown(NoteUserRecordTime)));

        subscription = observable
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(aLong -> {
                    setLeftTime(aLong);
                    if (aLong==0)
                        EventBus.getDefault().post(new EventMsg(EventMsg.MessageType.Record_Time_Out));
                });

(看完/读完)这篇文章有何感想! www.yzc261.com的分享…

亚洲城娱乐如何在安卓真机上调试react-native

( 亚洲城娱乐 )

小米手机,怎么调试react-native程序?写完代码看不到后台,也没找到那个摇一摇就出现的调试模式,求科普!!!

miui 会默认关闭 App 的悬浮窗权限,因此你看不到摇一摇出现的调试悬浮窗。去设置里面打开相应 react native app 的悬浮窗权限就可以了。

摇一摇就有的啊, 当初玩的时候真是震惊了,第一次真机部署要usb链接, 然后拔了线连wifi就能开发调试了

可以看看这个小哥写的一个demo 音乐类app https://github.com/chunmu/RNM…
项目里面有对一些常见问题和常用库进行列出 有看头

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…