小编tyn*_*ynn的帖子

Python3错误:initial_value必须是str或None

虽然从移植代码python23,我从一个URL读取时出现此错误

TypeError:initial_value必须是str或None,而不是字节.

import urllib
import json
import gzip
from urllib.parse import urlencode
from urllib.request import Request


service_url = 'https://babelfy.io/v1/disambiguate'
text = 'BabelNet is both a multilingual encyclopedic dictionary and a semantic network'
lang = 'EN'
Key  = 'KEY'

    params = {
        'text' : text,
        'key'  : Key,
        'lang' :'EN'

        }

url = service_url + '?' + urllib.urlencode(params)
request = Request(url)
request.add_header('Accept-encoding', 'gzip')
response = urllib.request.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
            buf = StringIO(response.read())
            f = gzip.GzipFile(fileobj=buf)
            data …
Run Code Online (Sandbox Code Playgroud)

python urllib urllib2 python-3.x

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

为什么Activity中受保护的android:onClick方法实际上有效?

假设你android:onClick="doClick"Activityas中定义

protected void doClick(View view) { }
Run Code Online (Sandbox Code Playgroud)

文件指出,

此名称必须对应于只接受View类型的一个参数的公共方法.

这是底层Class.getMethod()方法的一个给定要求,它只能在文档声明它时找到公共方法

返回一个Method对象,该对象反映此Class对象表示的类或接口的指定公共成员方法.

那么,这种实现根本不适用于某些设备和模拟器的可能性如何呢?虽然它对使用相同API级别的其他设备不起作用?

java reflection android android-source

31
推荐指数
1
解决办法
654
查看次数

动画师只能在Looper线程Android上运行

我正在尝试在任务完成时动画一些东西.这里的问题是我收到此错误消息:

android.util.AndroidRuntimeException: Animators may only be run on Looper threads
   at android.animation.ValueAnimator.cancel(ValueAnimator.java:1004)
   at android.view.ViewPropertyAnimator.animatePropertyBy(ViewPropertyAnimator.java:965)
   at android.view.ViewPropertyAnimator.animateProperty(ViewPropertyAnimator.java:921)
   at android.view.ViewPropertyAnimator.alpha(ViewPropertyAnimator.java:735)
   at com.design.zaton.prototypei.MainActivity$1$1.run(MainActivity.java:93)
   at java.lang.Thread.run(Thread.java:761)
Run Code Online (Sandbox Code Playgroud)

该应用程序使用相同的确切代码工作正常,但现在它根本没有.我真的很困惑.

这是错误发生的地方:

new Thread(new Runnable() {
    @Override
    public void run() {
        final String s = getGiphyViews(String.valueOf(mEdit.getText()));
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                result.setText(s);
            }
        });

        loading.animate()
                .alpha(0)
                .setDuration(100);

        done.animate()
                .scaleY(1)
                .scaleX(1)
                .setDuration(300);
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

该错误概述了该loading.animate()方法.

提前致谢!

java multithreading android android-animation

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

不推荐使用PlacePicker.getPlace()

我正在尝试开发基于google place API的应用程序.当我尝试使用时

Place place=PlacePicker.getPlace(data,this);
Run Code Online (Sandbox Code Playgroud)

显示的错误getPlace()已弃用.请提出解决方案.提前致谢!

android google-places-api google-places

22
推荐指数
1
解决办法
4980
查看次数

在recycleview中扩散,使其在添加新项目时自动滚动

如果我们使用DiffUtil.Callback,并做

adapter.setItems(itemList);
diff.dispatchUpdatesTo(adapter);
Run Code Online (Sandbox Code Playgroud)

我们如何确保添加新元素将滚动到新的位置.

我有一个案例,我看到项目消失,并在顶部创建一个新的第一个元素,但不可见.它会隐藏在顶部,直到您向下滚动以使其可见.在使用之前DiffUtil,我是手动实现的,在我知道我插入某个位置(在顶部)后,我可以滚动到.

android android-recyclerview

17
推荐指数
3
解决办法
7121
查看次数

Multidex安装失败

我正在使用CircledImageView库.它适用于棒棒糖+ Android版本.但在kitkat它崩溃了.所以在谷歌搜索后.我发现我必须在我的应用程序中实现multidex.

这是我的应用程序类.

public class FireApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Firebase.setAndroidContext(this);
        Fresco.initialize (this);
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

在defaultconfig下的build.gradle中,MultiDexEnabled为true

multiDexEnabled true
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,我收到以下错误.

java.lang.NoSuchFieldException: Field dexElementsSuppressedExceptions not found in class dalvik.system.PathClassLoader
 at android.support.multidex.MultiDex.findField(MultiDex.java:288)
 at android.support.multidex.MultiDex.access$300(MultiDex.java:57)
 at android.support.multidex.MultiDex$V19.install(MultiDex.java:390)
 at android.support.multidex.MultiDex$V19.access$000(MultiDex.java:369)
 at android.support.multidex.MultiDex.installSecondaryDexes(MultiDex.java:242)
 at android.support.multidex.MultiDex.install(MultiDex.java:161)
 at android.support.multidex.MultiDexApplication.attachBaseContext(MultiDexApplication.java:39)
 at com.buckydroid.anonchat.FireApp.attachBaseContext(Unknown Source)
 at android.app.Application.attach(Application.java:182)
 at android.app.Instrumentation.newApplication(Instrumentation.java:991)
 at android.app.Instrumentation.newApplication(Instrumentation.java:975)
 at android.app.LoadedApk.makeApplication(LoadedApk.java:511)
 at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4564)
 at android.app.ActivityThread.access$1500(ActivityThread.java:139)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1353)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:149)
 at android.app.ActivityThread.main(ActivityThread.java:5268)
 at java.lang.reflect.Method.invokeNative(Native …
Run Code Online (Sandbox Code Playgroud)

java android android-multidex

16
推荐指数
1
解决办法
3745
查看次数

adb shell的BroadcastReceiver权限

考虑使用a BroadcastReceiver来实现简单目标的简单工具.因为这不应该被其他应用使用,它定义了与一个的ProtectionLevel许可signaturesignatureOrSystem:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="any.test">

    <permission
        android:name="any.test.PERMISSION"
        android:protectionLevel="signatureOrSystem" />

    <application android:label="AnyTest">
        <receiver
            android:name=".Receiver"
            android:exported="true"
            android:permission="any.test.PERMISSION" />
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

现在我想通过发送广播来测试这个

adb shell am broadcast -n any.test/.Receiver
Run Code Online (Sandbox Code Playgroud)

从我的电脑.虽然这在模拟器上完全正常,但在设置此权限时,它在真实设备上根本不起作用.如果未设置权限,则一切都按预期工作.

那么如何定义或授予权限以便我可以在真实设备上测试所有这些ADB

我想在调试模式下使这个导出的接收器更安全,所以如果有一个特殊的ADB使用权限或运行时测试只允许ADB我可以实现的调用Receiver.onReceive(Context, Intent),它也会有所帮助.接收器不必同时为ADB其他应用程序工作.

permissions android broadcastreceiver android-permissions

15
推荐指数
1
解决办法
3969
查看次数

在Android中正确实现MVVM

我一直在努力寻找在Android中实现MVVM的正确方法.

整个想法对我来说仍然模糊,模式是有一个单独的层,逻辑完成(ViewModel).

这段代码只能动画一堆片段所在的背景的alpha.

public class StartActivity extends AppCompatActivity implements EntryFragment.EntryFragementListener {

    private static final float MINIMUM_ALPHA = 0.4f;
    private static final float MAXIMUM_ALPHA = 0.7f;

    @State
    float mCurrentAlpha = MINIMUM_ALPHA;

    @State
    String mCurrentTag = EntryFragment.TAG;

    private ActivityStartBinding mBinding;

    private StartViewModel mStartViewModel = new StartViewModel();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_start);
        mBinding.setStartViewModel(mStartViewModel);
        mBinding.bgBlackLayer.setAlpha(mCurrentAlpha);

        if (getSupportFragmentManager().findFragmentByTag(mCurrentTag) == null) {
            switch (mCurrentTag) {
                case EntryFragment.TAG:
                    setEntryFragment();
                    break;
                case FreeTrialFragment.TAG:
                    setFreeTrialFragment();
                    break;
            }
        }
    }

    private void setEntryFragment() { …
Run Code Online (Sandbox Code Playgroud)

android mvvm

14
推荐指数
1
解决办法
1678
查看次数

使用导航组件导航到首选项片段

我正在尝试将中型应用程序迁移到新的Android navigation组件。

目前,我的应用程序由组成,single activity并且我打算将其保持不变(就此而言);因此,我面临的问题是我有一个设置片段(PreferenceFragment),基本上可以从其他所有片段中导航到该片段。该导航是通过应用栏中的菜单进行的,因此onOptionsItemSelected(包含此导航)位于主活动中。

导航图

我在确定将线连接settingsFragment到其他线的正确方法时遇到了麻烦。对我来说,将它连接到所有其他对象似乎是意大利面条。

  1. 应该settingsFragment连接到所有其他片段吗?

  2. 由于Google没有给出足够的理由(或任何理由)来支持单一活动的应用程序体系结构,我应该放弃它吗?

android android-jetpack android-architecture-navigation

11
推荐指数
3
解决办法
1577
查看次数

EditText lineSpacingExtra奇怪的行为

我有一个EditText,lineSpacingExtra设置为8dp.当我用这个EditText和预设文本打开一个页面时,行间距很好.但是当我在同一页面上点击EditText的末尾并开始输入时,行间距似乎被忽略了.

这是一个错误还是我错过了什么?

在此输入图像描述

添加了代码段.我想,没什么特别的.

<EditText
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:padding="8dip"
        android:scrollbars="vertical"
        android:fadingEdge="vertical"
        android:gravity="top"
        android:lineSpacingExtra="8dip"
        android:lineSpacingMultiplier="2"
        android:textSize="18sp"
        android:capitalize="sentences"
        android:inputType="textCapSentences|textMultiLine"
        />
Run Code Online (Sandbox Code Playgroud)

更新:看起来Android 5 Lollipop 附带了这个bug

android line android-edittext android-5.0-lollipop

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