Articles of java的

查询ParseObject

我正在尝试使用Parse查询获取Object。 这是我的代码: ParseQuery query = ParseQuery.getQuery(“Conference”); query.findInBackground(new FindCallback() { public void done(List results, ParseException e) { if (e == null) { // Results were successfully found from the local datastore. } else { showLog(e.toString()); } } }); 我收到此错误: com.parse.ParseException:java.lang.IllegalStateException:ParseObject没有’objectId’的数据。 调用fetchIfNeeded()来获取数据。 BTW我的Conferenceclass包含指针。

Android @NonNull的用处

经过几次阅读和这样的问题后,我想知道是否有一点使用@NonNull Android支持注释。 如果我尝试使用注释为@NonNull的null参数调用方法,我可以看到来自Android Studio的非常小的警告。 只是一个警告? unit testing怎么样? 我应该用空参数测试方法吗? 如果我这样做…我将得到一个NullPointerException ,我的测试将失败 。 假设我们是两位开发人员。 一个在API上工作,另一个在各种方式下测试API。 作为第二个开发人员,我有责任测试所有内容,以便API具有防弹function。 这是unit testing的重点,对吗? 那么……第一个使用@NonNull的开发人员有什么意义呢? 如果其他人将此API与null参数一起使用……那么API将抛出NPE 。 然后他会想:“Urg,那个API糟透了…… NPE!” 他会是对的。 那个淘气的开发人员没有检查他发送的参数是否为null应该面临IllegalArgumentException,因为这是他的错误而不是API的错误! 我错了吗 ? 我认为这些注释会强制编译器显示错误,例如attempting to call methodName(@NonNull Object object) with null parameter 。 更新1 好的,谢谢大家的意见。 如果可能的话,我想总结一下我在这里遇到的“问题”。 以抽象的方式。 我编写了一些代码(API,一个库,一个类,无论如何),私有内部代码由提供function的公共方法包装。 假设这些公共方法将被其他任何人(包括我)使用。 他们中的一些人接受的参数必须永远不会为空 ,否则一切都会破裂。 阅读您的评论,我面临以下选择: 继续使用Java Documentation支持的契约/注释( @NonNull ),规定parameter must not be null 。 不要检查空参数(否则IDE会警告我),不知何故,祈祷我永远不会收到空参数; 与上面相同,但强制执行空检查(即使IDE会警告condition […]

如何序列化/反序列化arrayList(Object)

我有一个ArrayList 其中ItemList是: public class ItemList { public ArrayList it = new ArrayList(); public String name = “”; public ItemList() { } } 和项目是: public class Item { public String name = “”; public int count = 0; public Item() { } } 我尝试序列化这个列表: try { FileOutputStream fileOut = new FileOutputStream(sdDir + serFile); ObjectOutputStream out = […]

GCM规范ID

当为1个设备GCM具有多个regids时,返回规范id错误: {“multicast_id”:xxxx,”success”:2,”failure”:0,”canonical_ids”:1,”results”:[{“message_id”:”xxxxx”},{“registration_id”:”newest reg ID here”,”message_id”:”xxxxxx”}]} 所以它显示了GCM应该使用的最新regid,但为什么不显示你应该删除的regid(旧的)? 我怎么知道旧的regid是什么以及我应该从我的数据库中删除哪一个?

抽象类作为parcelable

基本上我在我的应用程序中有以下结构: 在没有抽象类ProjectItem情况下实现这样的结构会很简单,但在这种情况下我不知道如何实现它。 抽象类ProjectItem需要一个CREATOR因为它应该是可以分配的。 (如in.readTypedList(mProjectItems, ProjectItem.CREATOR);在构造函数Project(Parcel in)中) 但实际上,出于逻辑原因, CREATOR只能在其派生类中实现。 那么,如何实现这个结构以保持类Project parcelable? 编辑 这就是Project的构造函数之一: private Project(Parcel in) { in.readTypedList(mProjectItems, ProjectItem.CREATOR); } 但正如我已经说过的, ProjectItem不应该实现CREATOR

Rx Java mergeDelayError无法按预期工作

我在RxAndroid中使用RxJava和Android应用程序。 我正在使用mergeDelayError将两个逆向拟合网络调用组合成一个observable,如果发出一个,它将处理发出的项目,如果有的话,则处理错误。 这不起作用,它只会在遇到错误时触发onError操作。 现在为了测试这个我转移到一个非常简单的例子,当我有一个onError调用时,仍然不会调用successAction。 见下面的例子。 Observable.mergeDelayError( Observable.error(new RuntimeException()), Observable.just(“Hello”) ) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .finallyDo(completeAction) .subscribe(successAction, errorAction); 只有在使用两个成功的可观察对象时才会调用成功操作。 我错过了mergeDelayError应该如何工作的东西? 编辑: 我发现如果我删除observeOn并且subscribeOn一切都按预期工作。 我需要指定线程和思想,这是使用Rx的重点。 知道为什么指定那些Schedulers会破坏行为吗?

Android / Java – 如何创建HTTPS连接?

我这里有代码,允许我连接到https服务器并传输数据。 它工作正常,但我想知道我是否正确地做到这一点,我实际上正在建立一个安全的连接。 请检查我的工作。 谢谢。 public class HTTPSClient extends DefaultHttpClient { public HTTPSClient() { } @Override protected ClientConnectionManager createClientConnectionManager() { SchemeRegistry registry = new SchemeRegistry(); HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER; final SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); //socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); registry.register(new Scheme(“http”, PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme(“https”, socketFactory, 80)); registry.register(new Scheme(“https”, socketFactory, 443)); HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, […]

通过Wi-Fi Direct进行广播

我正在考虑通过多个Android设备之间的Wi-Fi Direct连接进行广播的可能性。 我创建了一个简单的消息广播应用程序来测试它是否有效,但到目前为止我还没有能够广播消息。 当我尝试发送数据包时,我得到一个SocketException (网络无法访问): 03-20 13:23:00.148: E/UdpBroadcaster(4180): sendto failed: ENETUNREACH (Network is unreachable) 03-20 13:23:00.148: E/UdpBroadcaster(4180): java.net.SocketException: sendto failed: ENETUNREACH (Network is unreachable) 03-20 13:23:00.148: E/UdpBroadcaster(4180): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:496) 03-20 13:23:00.148: E/UdpBroadcaster(4180): at libcore.io.IoBridge.sendto(IoBridge.java:465) 03-20 13:23:00.148: E/UdpBroadcaster(4180): at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182) 03-20 13:23:00.148: E/UdpBroadcaster(4180): at java.net.DatagramSocket.send(DatagramSocket.java:307) 03-20 13:23:00.148: E/UdpBroadcaster(4180): at com.example.android.wifidirect.UdpBroadcaster.sendMessage(UdpBroadcaster.java:59) 03-20 13:23:00.148: E/UdpBroadcaster(4180): at com.example.android.wifidirect.UdpBroadcaster.run(UdpBroadcaster.java:44) 03-20 […]

Android Studio:包含Google地图时的编译器设置

我在Android Studio中创建了一个新项目,并添加了Google地图活动。 我收到这些警告: warning: com/google/android/gms/maps/GoogleMap.class(com/google/android/gms/maps:GoogleMap.class): major version 51 is newer than 50, the highest major version supported by this compiler. It is recommended that the compiler be upgraded. warning: com/google/android/gms/maps/SupportMapFragment.class(com/google/android/gms/maps:SupportMapFragment.class): major version 51 is newer than 50, the highest major version supported by this compiler. It is recommended that the compiler be upgraded. warning: com/google/android/gms/maps/model/LatLng.class(com/google/android/gms/maps/model:LatLng.class): […]

可靠地隐藏软键盘

我有一个应用程序,需要在相当多的操作上关闭软键盘。 例如, 单击按钮时 , 绘制新布局时, 屏幕方向更改 , 控制器告知 UI等等。 我使用optionsMenuButton来使用ViewFlipper翻转视图,显然我希望键盘隐藏在翻转视图中(那里没有输入字段)。 到目前为止我已经尝试过这些并说明为什么这些不可靠: 这个没有用,因为我有很多editTexts和其他视图。 我需要一个更通用的,一个不需要视图作为参数,如果可能的话。 InputMethodManager imm = (InputMethodManager)getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 这个对我来说根本不起作用: getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 这个可以工作,但在翻转视图时立即再次popup键盘。 InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 这个有时会起作用,但getCurrentFocus()大部分时间都返回null。 InputMethodManager inputManager = (InputMethodManager) Context.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 这个只有在显示键盘时才有效: getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); 这个版本不像第一段代码那样使用EditText,而是使用根布局,它根据方向更改而每次调用oncreate时都会更改。 我有不同的横向/纵向和普通/大的布局XML。 所有根布局都具有ID root 。 这在第一次很好地工作,但在那之后,它不再起作用了。 InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(findViewById(R.id.root).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); Bottomline:我尝试了许多软键盘隐藏方法,但它们似乎都不可靠。 […]