小编Baj*_*dda的帖子

HTTP/2协议不能与okhttp一起使用

我正在使用带有okhttp 2.4.0的Retrofit 1.9.到目前为止,我们在服务器端禁用了SPDY协议(我通过检查).服务器端的启用协议是HTTP/2(我通过检查).

所以我认为okhttp将尝试使用HTTP/2(最新的一个协议)进行api调用,但它在Android设备4.2.2 samsung S4上使用HTTP/1.1 -

D/Retrofit : OkHttp-Selected-Protocol: http/1.1
Run Code Online (Sandbox Code Playgroud)

有人告诉我Android设备直到5.0 才支持SPDY(我没有任何证据),因此该设备从未尝试过使用SPDY连接.但我确信我们的服务器根本没有使用SPDY我自己使用上面的链接检查了它.

并且okhttp开始支持HTTP/2,因为它是2.3.0版本,请参见此处.

如果我在上面的Android 5.0中使用相同的东西,我在生产应用程序上获得了相同配置(okhttp 2.4.0和Retrofit 1.9)的异常 -

java.net.ProtocolException: Expected ':status' header not present at
com.squareup.okhttp.internal.http.SpdyTransport.readNameValueBlock(SpdyTransport.java:197)at com.squareup.okhttp.internal.http.SpdyTransport.readResponseHeaders(SpdyTransport.java:104)
at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:917)
at com.squareup.okhttp.internal.http.HttpEngine.access$300(HttpEngine.java:95)
at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:902)
at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:760)
at com.squareup.okhttp.Call.getResponse(Call.java:274)
at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:230)
at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:201)                                                                                         
at com.squareup.okhttp.Call.execute(Call.java:81)
at retrofit.client.OkClient.execute(OkClient.java:53)                                                                                         
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:326)                                                                                            
at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)                                                                                             
at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)                                                                                            
at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)                                                                                       
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)                                                                                     
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)                                                                                      
at retrofit.Platform$Android$2$1.run(Platform.java:142)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)

有两个修复 -

  1. 强制okhttp只使用http/1.1 -

    OkHttpClient客户端=新的OkHttpClient(); client.setProtocols(Arrays.asList(Protocol.HTTP_1_1));

注意 - 我们不能使用Protocol.HTTP_2或Protocol.SPDY_3,因为如果 …

android retrofit okhttp retrofit2 okhttp3

14
推荐指数
0
解决办法
1473
查看次数

HasActivityInjector在Android Dagger 2中无法解析

我试图在我的android应用程序中实现HasActivityInjector,但它显示了HasActivityInjector无法解决。在我在项目中使用的依赖项和插件下面,

apply plugin: 'kotlin-kapt'
Run Code Online (Sandbox Code Playgroud)

implementation 'com.google.dagger:dagger:2.16'
kapt 'com.google.dagger:dagger-compiler:2.16'
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的代码-

class RanoBoilerplateApplication : Application(), HasActivityInjector{
    @Inject
    lateinit var activityDispatchingAndroidInjector:
            DispatchingAndroidInjector<Activity>

    override fun onCreate() {
        super.onCreate()

        DaggerAppComponent.builder()
                .application(this)
                .build()
                .inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> =
            activityDispatchingAndroidInjector
}
Run Code Online (Sandbox Code Playgroud)

我不知道我还必须包括哪些其他依赖项才能工作,如果有人以前这样做过,可以帮助我。

此处找到最新的Dagger 2版本。

快乐的编码:-)

android dependency-injection kotlin dagger-2

6
推荐指数
4
解决办法
2508
查看次数

如何在 Android 10 的 AOSP 中将供应商特定的 API 列入白名单

我正在尝试将特定于供应商的 API 添加到我的 AOSP 代码库中。我能够在 Android 5 到 9 上运行此功能,但无法在 Android 10 上解决此问题。

我阅读了 AOSP 文档上用于实现 Java SDK 库的文档

我有以下蓝图文件:

java_sdk_library {
  name: "com.mycompany.sdk.myclass",
  srcs: ["java/**/*.java"],
  api_packages: ["com.mycompany.sdk.myclass"],
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令生成了 api 子目录:

build/soong/scripts/gen-java-current-api-files.sh "vendor/mycompany/sdk/myclass" && m update-api
Run Code Online (Sandbox Code Playgroud)

这会将我所有的公共方法签名放入 current.txt 文件中。

我将其作为启动 jar 添加到我的顶级 board.mk 文件中:

PRODUCT_BOOT_JARS += com.mycompany.sdk.myclass
Run Code Online (Sandbox Code Playgroud)

构建此文件会创建相应的 com.mycompany.sdk.myclass.xml 权限文件:

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <library name="com.mycompany.sdk.myclass"
    file="/system/framework/com.mycompany.sdk.myclass.jar"/>
</permissions>
Run Code Online (Sandbox Code Playgroud)

一切构建和安装都很好。我验证了权限文件位于 /system/etc/permissions/ 中并指向正确的 jar 文件名。但是,当我运行针对我的私有 SDK 构建的测试应用程序时,出现“访问隐藏方法(黑名单、链接、拒绝)”异常:

W/test_app: Accessing hidden method Lcom/mycompany/sdk/myclass;->myMethod(Landroid/content/Context;Z)V (blacklist, linking, denied)
Run Code Online (Sandbox Code Playgroud)

我可以通过发出以下命令来消除此黑名单错误:

adb shell settings put …
Run Code Online (Sandbox Code Playgroud)

api sdk vendor android-source

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

如果任何工作线程可以在android中更新UI?

我想,我们不能更新任何UI view元素(TextView,EditText在任何工作线程等),但在下面的例子中,我能够更新views从辅助线程,不是所有的时间,但只是偶尔.

请参阅以下示例我在工作线程中更新UI元素的示例 -

public class AndroidBasicThreadActivity extends AppCompatActivity
{
    public static TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_android_basic_thread);

        textView = (TextView) findViewById(R.id.textview);

        MyAndriodThread myTask = new MyAndriodThread();
        Thread t1 = new Thread(myTask, "Bajrang Hudda");
        t1.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的工作线程 -

class MyAndriodThread implements Runnable
{
    @Override
    public void run()
    {
        AndroidBasicThreadActivity.textView.setText("Hello!! Android Team :-) From child thread.");
    }
}
Run Code Online (Sandbox Code Playgroud)

相信我,我不会说任何例外 -

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view …
Run Code Online (Sandbox Code Playgroud)

java multithreading android

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

如何使用 JSOUP 获取 google play 商店应用程序版本?

我正在使用下面的代码通过使用 Jsoup 获取详细信息来从 Google Play 商店获取versionName,但它抛出了一些异常,但最近它工作正常。不知道现在怎么样了?

我的代码是 -

public class VersionChecker extends AsyncTask<String, String, String> {

    private String newVersion;

    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + ParkwayApplication.getInstance().getPackageName() + "&hl=en")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select("div[itemprop=softwareVersion]")
                    .first()
                    .ownText();
            Log.d("otherhtml", newVersion);
        } catch (IOException e) {
            e.printStackTrace();
        }

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

注意 - 在上面的代码中,select()返回大小 0,当我调用first() 时,它将返回 null,这就是为什么会出现空指针异常。

注意 - 我不知道为什么它最近工作为什么现在不工作?

这里是我的链接试图和 …

android jsoup

0
推荐指数
1
解决办法
2135
查看次数

如何在xml可绘制android中绘制矩形内端三角形形状?

我想绘制一个与下面相同的形状(浅蓝色),以便我可以将其作为 TextViews 的背景 -

在此输入图像描述

显然,如果我只需要绘制一个矩形,但在形状上我也想要一个内三角形,这可能很容易。

如果有人尝试过这个,请帮助我。

谢谢

xml android vector shapes drawable

0
推荐指数
1
解决办法
1271
查看次数