我正在使用带有 Kotlin 协程的 Retrofit 2.7.1。
我有一个 Retrofit 服务定义如下:
@PUT("/users/{userId}.json")
suspend fun updateUserProfile(
@Path("userId") userId: String,
@Query("display_name") displayName: String) : Void
Run Code Online (Sandbox Code Playgroud)
此调用返回HTTP 204 No Content响应,这会导致 Retrofit 崩溃:
kotlin.KotlinNullPointerException: Response from com.philsoft.test.api.UserApiService.updateUserProfile was null but response body type was declared as non-null
at retrofit2.KotlinExtensions$await$2$2.onResponse(KotlinExtensions.kt:43)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:129)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Run Code Online (Sandbox Code Playgroud)
如何在改造中使用协程处理 204 响应而不会崩溃?
在这里看到关于"将"点击事件"传递"到底层可点击的几个问题后,我回想起我曾经遇到过这个问题.实际发生的是,如果用户点击最顶部的空白区域,因为它不可点击,该事件将由可方便地放置在用户手指下方的可点击(即)处理.我通过制作顶部的可点击来修复它.那时候我没有多想,但这个解决方案似乎有点"hacky".FragmentsViewsFragmentsFragmentViewGroupViewButtonFragmentViewGroup
我知道View默认情况下不可点击的拦截点击事件是正常的行为,但是人们会认为,一个很大的用途Fragments是显示视图层次结构(由Activity之前唯一完成的任务)它会Activity在这个意义上类似于一个.当一个人Activity触发Intent创建一个新的Activity,然后这个Activity在屏幕上时,没有任何点击事件被传递到底层Activity.我意识到一个Activity可以包含许多Fragments可能无法填满整个屏幕甚至没有xml的东西,但有时候点击事件只能由最顶层保留Fragment.
尽管如此,这里提出的问题是:
1)设置ViewGroup最Fragment可点击的最佳解决方法是什么?
2)这个功能是否存在而且我不知道它?如果没有,应该吗?
我正在为android构建一个简单的MQTT客户端,我在RMBS控制台上收到"客户端标识符的套接字错误"错误.这只发生在客户端的android实现中(我还创建了一个Java桌面客户端并且运行没有问题).对于Android客户端,我正在起诉Paho Java客户端库.这是我的代码:
这是Android客户端:
package com.example.mqttdroid;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.internal.MemoryPersistence;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
public class MQTTClient extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mqttclient);
// new BackTask().execute(); not used because (seems to be the problem)
MqttConnectOptions conOpts = new MqttConnectOptions();
conOpts.setKeepAliveInterval(30);
conOpts.setWill(client.getTopic("Error"), "something bad happened".getBytes(), 1, true);
client.connect(conOpts);
client.subscribe("/House/Kitchen/Bulb");
client.setCallback( new MqttCallback() {
@Override
public void connectionLost(Throwable arg0) { …Run Code Online (Sandbox Code Playgroud) 我是Android开发的新手(总体来说是坦率的开发),因此我一直在阅读Commonsware Busy Coder的指南.在阅读SQLite部分时,有一些事情对我来说并不是100%.以下是我认为正在发生的事情以及一些问题.如果我在思考过程中出错,请纠正我.
作者建议,如果要在应用程序中使用多于一个Activity的数据库,则不应使用每个Activity的Context引用来实例化SQLiteOpenHelper.相反,您应该使用getApplicationContext()Activity提供的.
通过这样做,他使用了这样一个事实,即getApplicationContext()在应用程序进程开始后立即检索创建的Context的单例实例.这是我的问题出现的地方.我想如果我在实例化SQLiteOpenHelper时使用Activity提供的Context(this关键字),每个Activity都会创建自己的SQLiteOpenHelper实例.在我看来,仅使用Activity的Context不会通知Application Context已经创建了一个SQLiteHelper实例,因此,它创建一个新实例而不是重用现有实例.我的想法是否正确?
我认为Context(并且如果我错了,请纠正我)作为开发人员获取Android OS提供的信息和资源的"门户"(即通过获取系统服务getSystemService()).但是使用这个(来自一个Activity)或使用它getApplicationContext()有不同的含义.使用它,将获得一个Context的实例,它对您当前的Activity是"本地的",但使用getApplicationContext()引用整个应用程序.如果这是正确的,这是否意味着当我将引用传递getApplicationContext()给SQLiteOpenHelper的构造函数时,它将让我的整个应用程序知道我的SQLiteOpenHelper的实例已经创建.SQLiteOpenHelper如何让应用程序了解这一点?它是否使用一些静态方法,如public/private static dbCreated(Context context){//让上下文知道这个运行的实例}让应用程序知道吗?
如果这令人困惑,我很抱歉.
提前谢谢
我正在开发一个与facebook集成的Android应用程序.当我设置LoginButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO)时,该应用程序完全正常.
当我尝试使用SSO时会出现问题.我收到以下错误.当我使用不正确的keyhash时,我曾经遇到类似的错误; 事实并非如此,因为Webview登录工作正常.更令人惊讶的是,如果应用程序安装在FB中,Android应用程序可以正常运行.例如,我是应用程序管理器,因此它默认安装在我的Facebook个人资料中,但是当我尝试使用另一个没有安装该应用程序的fb帐户时,它无效.当我尝试登录时出现以下错误,我得到一个对话框,告诉我将授予基本权限,但实际上我甚至没有获得基本权限.
我已提交该应用以供审核,以便在App Center上显示.当我这样做时,对话框显示一个复选框,我确认我的应用程序使用SSO.在我使用SSO之前,facebook是否需要批准我的应用程序(如果是这样,这没有意义)
我花了好几个小时试图解决这个问题,但我找不到解决方案.请帮忙.
08-24 01:39:16.058: W/Bundle(21880): Key com.facebook.platform.protocol.PROTOCOL_VERSION expected String but value was a java.lang.Integer. The default value <null> was returned.
08-24 01:39:16.068: W/Bundle(21880): Attempt to cast generated internal exception:
08-24 01:39:16.068: W/Bundle(21880): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
08-24 01:39:16.068: W/Bundle(21880): at android.os.Bundle.getString(Bundle.java:1069)
08-24 01:39:16.068: W/Bundle(21880): at android.content.Intent.getStringExtra(Intent.java:4350)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient$KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.java:821)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:272)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:238)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient$GetTokenAuthHandler.getTokenCompleted(AuthorizationClient.java:772)
08-24 01:39:16.068: W/Bundle(21880): at com.facebook.AuthorizationClient$GetTokenAuthHandler$1.completed(AuthorizationClient.java:731)
08-24 01:39:16.068: …Run Code Online (Sandbox Code Playgroud) 我正在浏览GDK文档LiveCards(高频率),我遇到了这行代码:
mLiveCard.getSurfaceHolder().addCallback(new RenderThread());
Run Code Online (Sandbox Code Playgroud)
RenderThread是一个Class,extends Thread并没有实现任何SurfaceHolder.Callback.另一方面,在相同的示例代码中,它们定义了LiveCardRenderer哪个实现DirectRenderingCallback依次extends SurfaceHolder.Callback.不LiveCardRenderer应该用来代替RenderThread?
我正在关注这个网站http://givemepass.blogspot.hk/2011/12/http-server.html来尝试使用android应用程序连接PHP服务器来获取消息。
获取服务器消息.java
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class GetServerMessage {
public String stringQuery(String url){
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost method = new HttpPost(url);
HttpResponse response = httpclient.execute(method);
HttpEntity entity = response.getEntity();
if(entity != null){
return EntityUtils.toString(entity);
}
else{
return "No string.";
}
}
catch(Exception e){
return "Network problem";
}
}
}
Run Code Online (Sandbox Code Playgroud)
GetPhpServerMessageDemoActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class GetPhpServerMessageDemoActivity extends Activity {
/** Called when …Run Code Online (Sandbox Code Playgroud) 从我可以收集的程序已被放入后台Application Stop已被调用.应用程序返回到forground,这是发生错误的时候.该应用程序因任何原因无法加载xml文件,每次在我的手机HTC Desire One上运行代码和xml.有什么明显的东西我可以解决这个问题,或者有关如何追踪这个问题的任何建议?
这是我从TestFlight返回的调用堆栈.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hdms.manager/com.hdms.manager.Drawable.SplashScreen}: android.view.InflateException: Binary XML file line #8: Error inflating class <unknown>
android.app.ActivityThread.performLaunchActivity in ActivityThread.java on Line 2247
android.app.ActivityThread.handleLaunchActivity in ActivityThread.java on Line 2297
android.app.ActivityThread.access$700 in ActivityThread.java on Line 152
android.app.ActivityThread$H.handleMessage in ActivityThread.java on Line 1282
android.os.Handler.dispatchMessage in Handler.java on Line 99
android.os.Looper.loop in Looper.java on Line 137
android.app.ActivityThread.main in ActivityThread.java on Line 5328
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke in Method.java on Line 511
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run in ZygoteInit.java on Line 1102
com.android.internal.os.ZygoteInit.main in ZygoteInit.java …Run Code Online (Sandbox Code Playgroud) 有了这段代码
public static List<App> findByKeyword(Context context, String keyword){
ContentResolver resolver = context.getContentResolver();
Uri uri = getContentUri();
String[] projection = DataColumns.ALL;
String selection = DataColumns.NAME+" like '%?%' ";
String[] selectionArgs = {keyword};
Cursor cursor = resolver.query(uri, projection, selection, selectionArgs, DEFAULT_ORDER );
return cursorToList(cursor);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误
引起:java.lang.IllegalArgumentException:无法绑定索引1处的参数,因为索引超出范围.该语句有0个参数.
应该是SQLite原始查询,SELECT * FROM table WHERE name LIKE '%?%'
但是通过ContentResolver查询API存在使用参数的问题
我也尝试过使用"引号
String selection = DataColumns.NAME+" like \"%?%\" ";
Run Code Online (Sandbox Code Playgroud)
它还说
该语句有0个参数.