Articles of java的

是否可以确定当前的VM是Java SE还是Dalvik?

我希望实现如下所示的内容: if(isJavaVirtualMachine()){ System.out.println(“You are running on a JVM”); }else if(isDalvikVirtualMachine()){ Log.i(“env”,”You are running on an android.”); } 可能吗? 如果Java本身不可能,我可以通过JNI进行吗?

Android耳机Jack Listener

有谁知道如何检测设备上的耳机插孔是否在Android上拔掉? 我有一个音乐播放器,我需要在拔下耳机时暂停音乐。 我发现最接近的是使用AudioManager 。 这是正确的方向吗?

我可以比较两个文件:http服务器上的本地和远程文件而无需下载吗?

我想比较两个文件(一个文件位于本地位置,第二个文件位于http服务器上)。 我可以不下载而这样做吗? 我想知道两个文件完全相同。

如何使用layout_weight获取LinearLayout的高度(以像素为单位)

这是我的第一篇文章。 我正在学习用java代码安装Android应用程序。 我正在使用一个LinearLayout“variables名为:ll”与预定义的layout_weight(我想在将来随时更改)并将高度和宽度设置为MATCH_PARENT。 我想以像素为单位获得此LinearLayout的高度。 我使用java(ll.addView(variableForAnObject);)填充它。 我试图使用ll.getLayoutParams()。height获得它的高度; 但我得到了-1。 因为我相信这是MATCH_PARENT的常量。 将高度设置为0dp会使ll不可见,并将高度设置为0。 请告诉我是否有办法达到它的高度。 我想我可以通过使用DisplayMetrics获取屏幕高度并进行几乎不可能的计算(至少对我而言)来做到这一点,但这太复杂了。

在清单中使用flavor的包

鉴于以下应用程序的风格: productFlavors { pro { applicationId = “com.example.my.pkg.pro” } free { applicationId = “com.example.my.pkg.free” } } 我需要声明GCM权限: com.example.gcm´必须替换为com.example.my.pkg.pro或com.example.my.pkg.free具体取决于当前的风味。 如何配置清单以自动选择applicationId字段中定义的包?

消耗来自Okhttp的One-Shot ResponseBody会导致Retrofit出现问题

我正在使用带有Okhttp拦截器的Retrofit来检测我的oauth令牌是否已过期。 如果令牌已过期,我想请求新令牌,再次尝试请求,然后将该响应发送到Retrofit。 这是我的拦截器类: public class CustomInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); // try the request Response response = chain.proceed(request); if (response.body().string().contains(Constants.TOKEN_AUTH_ERROR_MESSAGE)) { Log.v(“retrofit_error”, “token expired”); //get current token, create headers OAuthTokenResponse expiredToken = SharedPreferencesUtil.getOAuthToken(); OAuthTokenResponse newOauthToken = RestClient.getInstance().getTokenService().refreshOauthToken(expiredToken.getRefreshToken()); //store new token, return SharedPreferencesUtil.saveOAuthToken(newOauthToken); // create […]

关于java SimpleDateFormat的简单问题

这可能是一个愚蠢的问题,但我不懂java日期函数。 这是一些代码: SimpleDateFormat sdf = new SimpleDateFormat(“hh:mm”); Date s = sdf.parse(var); Calendar scal = java.util.GregorianCalendar.getInstance(); scal.setTime(s); Log.w(“Time: “, Long.toString(s.getTime())); 如果var =“10:00”,我得到“64800000”。 如果var =“11:00”,我得到“68400000”。 如果var =“12:00”,我得到“28800000”。 如果var =“13:00”,我得到“75600000”。 如果var =“14:00”,我得到“79200000”。 如果var =“00:00”,我得到“28800000”。 什么是12:00? 为什么,当var = 12:00时,我得到与00:00时相同的结果? 所有其他结果似乎都是正确的。 我显然不理解java日期函数,但我似乎无法在任何地方find任何解释。 这搞砸了我的时间跨度计算器。

Android Rest客户端

我find了很多用于请求REST API的示例,但是所有这些都令人困惑,有些人可以向我解释一种使用http请求的方法。 我的要求是,我想通过提供用户名,密码和密钥从REST API获取数据。 我用过的是, HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(“REST API url”); post.setHeader(“Content-type”, “application/json”); JSONObject obj = new JSONObject(); obj.put(“username”, “un”); obj.put(“pwd”, “password”); obj.put(“key”,”123456″); post.setEntity(new StringEntity(obj.toString(), “UTF-8”)); HttpResponse response = client.execute(post); 但是响应总是为空,当使用浏览器工具通过发布相同的数据进行测试时,这些工作正常。我的方法有些问题吗? 请建议我正确的方法。 谢谢

没有moveToFirst的Cursor.moveToNext

下一个代码会按预期工作吗? Cursor c = db.query(tableName, requestedColumns, condition, conditionParams, null, null, sortOrder); while(c.moveToNext()) { //do stuff with rows } 到目前为止我发现的例子建议在循环之前调用c.moveToFirst() ,但这是否真的有必要?

时间戳显示错误的数据

为什么时间戳((长)-62135596800000L)返回0001-01-03 00:00:00 ,但必须返回0001-01-01 00:00:00 ? 此服务在此处显示正确的时间戳