我正在使用带有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)
有两个修复 -
强制okhttp只使用http/1.1 -
OkHttpClient客户端=新的OkHttpClient(); client.setProtocols(Arrays.asList(Protocol.HTTP_1_1));
注意 - 我们不能使用Protocol.HTTP_2或Protocol.SPDY_3,因为如果 …
我试图在我的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版本。
快乐的编码:-)
我正在尝试将特定于供应商的 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) 我想,我们不能更新任何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) 我正在使用下面的代码通过使用 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,这就是为什么会出现空指针异常。
注意 - 我不知道为什么它最近工作为什么现在不工作?
这里是我的链接试图和 …
我想绘制一个与下面相同的形状(浅蓝色),以便我可以将其作为 TextViews 的背景 -
显然,如果我只需要绘制一个矩形,但在形状上我也想要一个内三角形,这可能很容易。
如果有人尝试过这个,请帮助我。
谢谢