Articles of java的

如何加速Android XML解析?

下午好(取决于你住的地方)! 我是Android开发的新手,我正在努力将function从现有的iOS应用程序转移到Android。 此function的一部分是解析包含大约500个条目的“大”(~13,000行)RSS XML文件。 我花了10-15个小时在Android上研究XML解析并尝试使用主要的XML解析器:DOM,SAX和Pull-parsing。 以下是我的结果,在我的盒子上的模拟器(32位Windows Vista,2.2 GHz双CPU,3 GB RAM)中运行: SAX:约6:00分钟 拉解析:约4:00分钟 DOM:大于4:00分钟,但是当我对该实现进行编码时没有计时。 我也从github尝试过这个RSS阅读器,但花了> 10:00分钟: https://github.com/matshofman/Android-RSS-Reader-Library SAX,PP和DOM的实现都是从stackoverflow.com线程中获取的,所以我相信我没有做任何非标准的事情(尽管如此,我并没有把它排除在外)。 我决定呼吁更大,更有经验的人群来了解我还能尝试什么。 我无法控制文件的格式。 如果我实现这种端到端的方式,我只会编写一个Web服务,在服务器上执行所有繁重工作,然后发送一个小型,紧凑的JSON序列化列表。 相反,我有13K行文件。 🙂 对我能做什么的任何见解? 这似乎是一个相当普遍的问题,但大多数回复只是说尝试一种不同的主要XML解析器。 在我的情况下,我已经尝试了所有三个,甚至最快似乎太慢了。 我究竟做错了什么? 在Android上通过网络进行XML解析时,人们通常会遇到任何正常的“新手”问题吗? 提前感谢您提供的任何帮助!

获取onStopTrackingTouch的进度,而不是onbarbar中的onProgressChanged

我是android开发的新手,我使用onProgressChanged获取当前进度,因为progress是函数的一个参数。 但是当用户释放搜索seekbar而不是立即值时, 我想获得进度的最终值。 提前致谢。

写入jfloat数组时“致命信号11(SIGSEGV)为0x00000010(代码= 1)”

我目前正在用ndk实现一个android函数。 我在java中声明了这个函数 public static native void calculate(float[] rgb,float factor); 然后,我写了C函数: JNIEXPORT void JNICALL Java__calculate( JNIEnv * env, jobject object, jfloatArray rgbObject, jfloat factor){ jfloat* rgb = (*env)->GetFloatArrayElements(env,rgbObject,0); if(rgb==NULL) return; rgb[0]=5; // Test, crash! (*env)->ReleaseFloatArrayElements(env,rgb,rgbObject,0); } 但是,每当我尝试使用数组和某个值调用函数时,我都会收到logcat消息: A / libc(16064):致命信号11(SIGSEGV)位于0x00000010(代码= 1) 之后,应用程序崩溃了。 我发现在写入浮点值时总会出现这种情况。 阅读不会导致崩溃。 我有什么不对吗? 是不是可以写出数组值?

unicode字符串的gson序列化不起作用

我正在使用gson库将我的数据序列化为json格式的字符串。 当我在服务器上收到json消息时,我得到一个unicode字符的问号。 例如,我从我的Android客户端发送以下内容: {“message_content”:”This is a test message: مرحبا أصدقاء”} 但服务器接收它为: {“message_content”:”This is a test message: ???? ??????”} 码: import java.io.UnsupportedEncodingException; import android.telephony.PhoneNumberUtils; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.annotations.SerializedName; public class TestMessage { @SerializedName(“message_content”) private String mMessageContent; public TestMessage(String messageContent) { try { byte[] utf8 = messageContent.getBytes(“UTF-8”); mMessageContent = new String(utf8, “UTF-8”); } catch (UnsupportedEncodingException […]

‘捕获’OutOfMemoryError完全解决了内存不足的问题?

我在LogCat中收到OutOfMemoryError消息,我的应用程序崩溃,因为错误未被捕获。 导致OutOfMemoryError的两件事: 1.将大文本文件读入字符串。 2.将该字符串发送到我的TextView。 简单地为这两件事添加一个catch不仅捕获OutOfMemoryError,而且似乎完全解决了内存不足的问题。 LogCat中没有更多崩溃,也没有更多错误消息。 该应用程序运行完美。 这怎么可能? 究竟发生了什么? 使用此代码,我收到错误消息和应用程序崩溃: try { myString = new Scanner(new File(myFilePath)).useDelimiter(“\\A”).next(); } catch (FileNotFoundException e) { e.printStackTrace(); } myTextView.setText(myString); 只是通过“捕获” OutOfMemoryError ,LogCat中没有更多错误消息而且没有崩溃: try { myString = new Scanner(new File(myFilePath)).useDelimiter(“\\A”).next(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch(OutOfMemoryError e) { } try { myTextView.setText(myString); } catch(OutOfMemoryError e) { }

Java的FutureTask可组合性

我尝试使用Java的FutureTask , Future , Runnable , Callable和ExecutorServicetypes。 构建这些构建块的最佳实践是什么? 鉴于我有多个FutureTask ,并且我想按顺序执行它们。 当然,我可以创建另一个FutureTask,它按顺序提交/等待每个子任务的结果,但我想避免阻塞调用。 另一种选择是让这些子任务在完成时调用回调,并在回调中安排下一个任务。 但是走这条路,如何创建一个合适的外部FutureTask对象,它也处理子任务中的exception而不会产生那么多的样板? 我在这里想念一下吗?

Android:如何打开未知的文件types

我在android中开发一个文件浏览器应用程序。 如何处理扩展名未知的文件? 当我尝试打开这种文件时,它抛出ActivityNotFoundexception。 但我希望系统popup应用程序列表,以便我们可以手动选择要打开它的应用程序。 有人能帮我一下吗? 我开始通过将文件及其扩展名绑定到intent来打开文件的活动。 Intent intent = new Intent(Intent.ACTION_VIEW); MimeTypeMap mime = MimeTypeMap.getSingleton(); String ext = file.getName().substring(file.getName().lastIndexOf(“.”) + 1); String type = mime.getMimeTypeFromExtension(ext); intent.setDataAndType(Uri.fromFile(new File(file.toString())), type); try { startActivity(intent); } catch(Exception e){}

ViewPager java.lang.OutOfMemoryError:位图大小超过VM预算

可能重复: java.lang.OutOfMemoryError:位图大小超过VM预算 – Android 我使用ViewPager来显示资源文件夹中的图像集,如果我的图像尺寸很小,那么每件事都可以正常工作, 但当我用高清图像替换它,我需要它在我的应用程序,它给了我这个错误: java.lang.OutOfMemoryError:位图大小超过VM预算 注1: 我现在在我的代码中有5个图像用于测试,但最后我将有大约30个高清图像, 笔记2 : 我想知道为什么会发生这种情况,我是Android新手并且第一次使用viewpager类,之后我在另一个应用程序中使用了Gallery类,其中包含超过30个高清图像并且没有exception发生。 任何建议将不胜感激,非常感谢 我的代码: logcat堆栈: FATAL EXCEPTION: main java.lang.OutOfMemoryError: bitmap size exceeds VM budget at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:563) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:439) at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:462) at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:488) at com.test.demo.MyPagerAdapter.(MyPagerAdapter.java:42) at com.test.demo.MainActivity.onCreate(MainActivity.java:15) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3687) […]

处理事件:实现接口或使用内部类来处理接口。 哪个更好

要处理事件,有两种方法: 例如,实现回调接口 public class A implements View.OnClickListener { public void onClick(View v) { …. } @Override protected void onCreate(Bundle savedInstanceState) { … aboutLayout = (LinearLayout) findViewById(R.id.aboutLayout); aboutLayout.setOnClickListener(this); } } 创建实现回调接口的内部类 public class ActivityAbout { private class ViewClickListener implements View.OnClickListener { public void onClick(View v) { .. } } @Override protected void onCreate(Bundle savedInstanceState) { … […]

Google Play游戏服务中的IllegalStateException没有意义

我在Play Market玩了一个游戏,然后我收到了消息和堆栈跟踪。 java.lang.IllegalStateException Msg: (Not connected. Call connect() and wait for onConnected() to be called.) java.lang.IllegalStateException com.google.android.gms.internal.pn(Unknown Source) com.google.android.gms.internal.po(Unknown Source) com.google.android.gms.internal.e.loadState(Unknown Source) com.google.android.gms.appstate.AppStateClient.loadState(Unknown Source) com.peerkesoftware.blockcrusher.CloudSave.load(CloudSave.java:31) com.peerkesoftware.blockcrusher.CloudSave.setAppStateClient(CloudSave.java:26) com.peerkesoftware.blockcrusher.MorburActivity.onSignInSucceeded(MorburActivity.java:475) com.peerkesoftware.libgeneric.app.game.GameHelper.succeedSignIn(GameHelper.java:652) com.peerkesoftware.libgeneric.app.game.GameHelper.connectNextClient(GameHelper.java:539) com.peerkesoftware.libgeneric.app.game.GameHelper.onConnected(GameHelper.java:642) com.google.android.gms.internal.pk(Unknown Source) com.google.android.gms.internal.bj.k(Unknown Source) com.google.android.gms.internal.p$fa(Unknown Source) com.google.android.gms.internal.p$fa(Unknown Source) com.google.android.gms.internal.p$bp(Unknown Source) com.google.android.gms.internal.p$a.handleMessage(Unknown Source) android.os.Handler.dispatchMessage(Handler.java:99) android.os.Looper.loop(Looper.java:132) android.app.ActivityThread.main(ActivityThread.java:4126) java.lang.reflect.Method.invokeNative(Native Method) java.lang.reflect.Method.invoke(Method.java:491) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) dalvik.system.NativeStart.main(Native Method) 奇怪的是消息说我应该调用connect()并等待onConnected()。 但正如您在stacktrace中看到的那样,调用来自onConnected()。 所以我确定谷歌播放服务已经连接。 […]