Articles of java的

Android HTTPUrlConnection响应返回垃圾

这是我输入流标题的代码 mResponseCode = connection.getResponseCode(); mError = mResponseCode != 200 && mResponseCode != 201 && mResponseCode != 202; if (mError) { inputStream = connection.getErrorStream(); } else { inputStream = connection.getInputStream(); } inputStreamReader = new InputStreamReader(inputStream); bufferedReader = new BufferedReader(inputStreamReader); String inputLine; final StringBuilder builder = new StringBuilder(); while ((inputLine = bufferedReader.readLine()) != null) builder.append(inputLine); resultStr = […]

如何混合来自DatagramPackets的多个实时语音音频流?

我正在开发一个项目,我想添加一键通function,我有android作为客户端, java作为我的服务器。 我所做的是从AudioRecord发送bytes到我的服务器并将其广播回连接的客户端。 混合来自同时发送的不同客户端的data时,我的问题是什么。 这是我在服务器上尝试过的: static boolean status = true; static int port = 1938; static byte[] mixed_audio; static byte[][] all_bytes; static int client_count = 0; static DatagramSocket socket; static ArrayList addresses; public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(port); System.out.println(“Listening. . .”); addresses = new ArrayList(); for(int x = […]

Firebase数据库警告:“使用未指定的索引。 考虑添加“.indexOn”以获得更好的性能

使用Firebase实时数据库运行我的Android应用时,我收到以下警告: 使用未指定的索引。 考虑将“.indexOn”…添加到您的安全和Firebase数据库规则中,以获得更好的性能 我完全理解这个警告。 但我不知道如何让它变得更好。 我真的只想查询索引字段! 这是我的DB: { “groupUsers” : { “g1” : { “u1” : “admin” }, “g2” : { “u1” : “admin”, “u2” : “readonly” } }, “groups” : { “g1” : { “areas” : { “a1” : { “groupId” : “g1”, “name” : “My Group” } }, “interests” : { “i1” : […]

主场发射器强制停止后未收到Android AppWidget的按钮点击事件

我有一个应用程序小部件,可以在我的提供程序中的onUpdate()中接收click事件。 但是,当我尝试强制关闭主启动器时,单击事件将丢失。 我甚至在所有onEnabled() , onReceived() ……等中放置了断点:连接似乎丢失了。 因此,我如何“重新连接”按钮事件? WidgetProvider扩展AppWidgetProvider : @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d(TAG, “onUpdate()”); Log.d(TAG, “isLoading: ” + CONSTANT.isLoading); // update each of the widgets with the remote adapter from updateService // Get all ids ComponentName thisWidget = new ComponentName(context, ScoreWidgetProvider.class); int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); // Build the […]

Javareflection处理库的更改

好的,我有一个Android应用程序,我开始为应用程序创建一个插件系统,以便开发人员可以编写应用程序可以用来生成不同内容的内容提供程序,我不会完成整个过程,但一切正常,如下所示: 1)我创建了一个名为com.myaddonlib的库,我在我的项目中导入了这个库中有一个接口和不同的对象。 2)现在开发人员可以在他的最后创建一个简单的Java项目,导入库com.myaddonlib ,并在他的主类上实现接口,该接口具有从库中返回不同对象的方法。 3)回到Android应用程序,我可以加载开发人员创建的.jar文件(在将classes.dex添加到jar文件之后)和android DexClassLoader我可以加载实现的界面,如下所示: DexClassLoader classloader = new DexClassLoader(jarFilePath, tempDirectory, null, context.getClass().getClassLoader()); Class classToLoad = classloader.loadClass(“com.apackage.Addon”); 其中Addon是由addon开发人员创建的类,它从驻留在名为com.apackage的包中的库实现接口。 然后,我可以将com.myaddonlib库中的接口com.myaddonlib为com.myaddonlib的新实例,并调用addon开发人员实现的函数。 现在问题就是我决定更新插件库并从类中删除其中一个variables,这意味着插件的类现在与更新库中的类(在应用程序中使用)不同。 即使未使用更改的variables,也会导致应用程序崩溃而不会出现任何错误。 事实上两个类都不同(即使唯一的区别只是一个缺失的variables)会导致某些故障。 现在这不是一个简单的解释程序所以我会理解,鉴于我的英语不好,有些人会遇到麻烦。 我的问题是我需要知道如何避免由于两端之一上的库更改而导致的崩溃。 以及java如何在这种情况下处理对象更改

SSLHandshakeException未findAndroid HTTPS的证书路径的信任锚

我正在尝试建立与HTTPS站点的连接,并且我遇到了以下exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 。 我原来的代码如下: URL url = new URL(“https://example.com”); HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection(); in = urlConnection.getInputStream(); byte[] responsedata = CommonUtil.readInputStream(in); Log.w(TAG, “response is “+CommonUtil.convertBytesToHexString(responsedata)); 然后,我在这里阅读Google的文章,并将我的代码修改为: CertificateFactory cf; try { cf = CertificateFactory.getInstance(“X.509”); InputStream in = this.mContext.getResources().openRawResource(R.raw.cert); Certificate ca; ca = cf.generateCertificate(in); System.out.println(“ca=” + ((X509Certificate) ca).getSubjectDN()); in.close(); URL […]

从InstrumentationTestCase创建通知

我想从unit testing中测试通知是否能够从资产中播放自定义声音。 测试并不是为了validation任何东西,我把它写成一种快速的方式来演示一个function而不会混淆主应用程序代码。 所以在测试项目中,我在/res/raw添加了一个wav文件。 我将在通知构建器中使用此URL: Uri path = Uri.parse(“android.resource:///testsound.wav”); 该URL应该根据我在SO中阅读的问题工作。 我们假设它有效。 现在因为我不想在主项目的/res/raw文件夹中包含测试wav文件,但是在测试项目中,我不得不从InstrumentationTestCase扩展我的unit testing,以便我可以访问测试项目。 这是代码: NotificationCompat.Builder builder = new NotificationCompat.Builder(getInstrumentation().getContext()); … builder.setSound(path, AudioManager.STREAM_NOTIFICATION); … NotificationManager notificationManager = (NotificationManager) getInstrumentation().getContext().getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(NOTIFICATION_ID, builder.build()); notify调用抛出以下exception: java.lang.SecurityException: Calling uid 10198 gave package which is owned by uid 10199 at android.os.Parcel.readException(Parcel.java:1540) at android.os.Parcel.readException(Parcel.java:1493) at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:611) at android.app.NotificationManager.notify(NotificationManager.java:187) at android.app.NotificationManager.notify(NotificationManager.java:140) … at […]

如何同步Play服务实时多人游戏

我正在使用Libgdx开发流行游戏Pong的在线版本。 我已经开始使用谷歌的实时多人游戏服务在玩家之间发送游戏数据,但我无法弄清楚如何解决我面临的同步问题。 此刻发送的信息是玩家的划桨,所以当我移动时,我将新位置发送给对手。 在对手收到它时,时间已经过去并且同步丢失。 我知道使用最慢连接的动作之间可能会有一些等待时间,但是如何让它看起来更平滑呢?

openOptionsMenu()在appcompat-v7 22.1.0或更新版本中不起作用

我已经看到几个关于openOptionsMenu()无法在各种Android版本上运行的问题的报告,例如: 跨Android版本的openOptionsMenu() openOptionsMenu()不起作用 但我遇到的问题似乎与正在使用的appcompat-v7支持库的版本有关。 实质上,对于较新版本的appcompat-v7,如果您的活动扩展了Activity,则在调用openOptionsMenu()时菜单将显示正常,但如果您扩展ActionBarActivity或AppCompatActivity (即使用兼容性库)则不会起作用。 在旧版本的appcompat-v7中,它可以正常工作。 它是可重复的,如下: 在Android Studio中,导入示例’ActionBarCompat-Basic’ 在屏幕上添加一个按钮,调用openOptionsMenu() 请注意,这样可以正常工作,因为样本中使用了旧版本的库appcompat-v7:21.0.3 更改依赖关系以使用appcompat-v7:23.0.1,重建,当单击按钮时,菜单将不会出现。 更改主要活动以扩展活动(即没有应用程序兼容性) – 它可以工作 更改主要活动以扩展AppCompatActivity(即使用应用程序兼容性libarry) – 它失败 经过一些测试,我发现这在appcompat-v7:22.1.0中停止工作,并且将不再适用于此jar的任何较新版本。 这种行为在模拟器和物理设备上是相同的,在Android版本5.1.1(23)和2.1(7)上是我测试过的两个版本。 我添加了对此错误的评论: Android问题跟踪器错误 任何建议,想法或变通方法表示赞赏! 史蒂夫

为什么我们需要Lollipop的第4个构造函数?

我开始了一个针对Android Lollipop(21)的项目,并创建了一个自定义视图。 当我为视图生成构造函数时,我得到了一个新的第4个构造函数,它比其他构造函数占用更多的参数。 public class FooView extends FrameLayout { public FooView(Context context) { super(context); } public FooView(Context context, AttributeSet attrs) { super(context, attrs); } public FooView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } // This 4th constructor @TargetApi(Build.VERSION_CODES.LOLLIPOP) public FooView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); […]