Articles of null

在调用之前,如何确保另一个线程的处理程序不为空?

我的程序有一天抛出了一个NullPointerException,当它试图使用在另一个线程上创build的Handler来向这个线程发送消息。 由另一个线程创build的处理程序尚未创build,或者对于调用线程尚不可见,尽pipe调用线程已经在另一个线程上调用了启动。 这只发生很less。 几乎每个testing运行都没有得到例外。 我想知道什么是最好的方法是避免这个问题,最小的并发症和性能损失。 该程序是一个游戏,性能非常敏感,特别是一旦运行。 因此,我尝试避免在安装后使用同步,例如,宁愿避免在任何时候旋转variables。 背景: 在Android中,Handler类可能被用来“排队在一个不同于你自己的线程上执行的动作”。 文档在这里: http://developer.android.com/intl/de/reference/android/os/Handler.html 处理程序必须在将要使用的线程上创build。 因此,在创build该线程的线程所运行的线程的构造函数中创build它不是一个选项。 当Handler用于UI线程以外的线程时,还必须使用Looper类: http://developer.android.com/intl/de/reference/android/os/Looper.html 文档给出了使用这两个类的例子: class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } } 我非常丑陋的解决方法目前看起来像这样: public class LooperThread extends Thread […]

在Java / Android中testing空的JSON对象

我得到这个LogCat: 06-22 15:30:53.731: E/AndroidRuntime(2389): java.lang.NumberFormatException: Invalid float: "null" 06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.StringToReal.invalidReal(StringToReal.java:63) 06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.StringToReal.parseFloat(StringToReal.java:310) 06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.Float.parseFloat(Float.java:300) 06-22 15:30:53.731: E/AndroidRuntime(2389): at java.lang.Float.valueOf(Float.java:337) 这是代码: try { jObject = new JSONObject(result); starAvg = jObject.getString("AverageRating"); } ratingsBar = (RatingBar) findViewById(R.id.theRatingBar); ratingsBar.setRating(Float.valueOf(starAvg)); 这里是上下文: 在PHP中,我平均MySQL表中的列中的总数。 当有任何行时,它将发送一个平均的数据并对其进行编码,Java将它作为一个JSON对象进行拾取。 但有时,有些情况下表可能有0行,所以我得到这个JSON对象: {"AverageRating":null} 我的应用程序然后崩溃, LogCat如上所示。 该String似乎并不在乎是否拿起一个空的JSON对象,但是当我做Float.valueOf(theString)时,应用程序崩溃。 另一方面说明,我试图这样testing: if String […]

用空值作为parameter passingstring时排空string请求错误

我在volley上使用下面的代码string请求 pDialog = new ProgressDialog(context); pDialog.setMessage("Loading…"); pDialog.setCancelable(false); pDialog.show(); StringRequest strReq = new StringRequest(Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { pDialog.dismiss(); Log.e(tag, response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { pDialog.dismiss(); } }) { protected Map<String, String> getParams(){ Map<String, String> params = new HashMap<String, String>(); params.put("tag", "SHOW_FILE"); params.put("filename",filename); […]

GCM返回一个空消息types

我创build了一个使用GoogleCloudMessaging的应用程序。 应用程序可以注册到gcm并将其注册ID存储到我的服务器上的数据库。 我使用PHP,发送推送通知,但是当谷歌发送到我的设备,意图服务发现它的消息types为null。 我已经尝试了不同的应用程序中的相同的代码,它运作良好。 但这一次没有。 应用程序可以从谷歌获得消息,并通过显示一个空文本的通知来处理它。 我提供了下面的intent服务和php代码。 感谢您的回答。 send_message.php <?php if (isset($_GET["regId"]) && isset($_GET["message"])) { $regId = $_GET["regId"]; $message = $_GET["message"]; include_once './GCM.php'; $gcm = new GCM(); $registatoin_ids = array($regId); $message = array("price" => $message); $result = $gcm->send_notification($registatoin_ids, $message); echo $result; } ?> GCM.php <?php class GCM { //put your code here // constructor function […]

我们如何在Android中将null定义为数据types,就像我们在iPhone中定义nsNull一样

jsonObject.accumulate("status",null); 我想要传递null作为JSON服务调用中的值我尝试"" , " " , NULL , nil , "null"但没有任何帮助 任何人都可以有这个解决scheme?

即使数据通信处于活动状态,ConnectivityManager getActiveNetworkInfo()也始终为空

我正在做一个android项目,我有需要检查互联网连接。 我search了网页,我在这里find了一个解决scheme。 但是,我在检查互联网状态时遇到问题。 我已经到处search,但我找不到解决我的问题。 这是清单: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> 这里是检查互联网连接的代码: cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); if (cm != null) { NetworkInfo ni = cm.getActiveNetworkInfo(); isConnected = (ni != null && ni.isAvailable() && ni.isConnected()) ? true : false; } 问题在于,即使TYPE_MOBILE数据通信处于活动状态,nivariables也始终为空。 要访问运营商的互联网stream量,这是testing它的正确方法吗? 或者我必须使用TelephonyManager? 由于我使用了getNetworkInfo()[]并对其进行debugging,因此TYPE_MOBILE的HSPA出现在那里,但isAvalaible始终为false,并且getState()= DISCONNECTED。 但是我有运营商的数据stream量启用和工作(在其他应用程序) [编辑] :即时通讯testing它直接在设备不在模拟器:)。 提前致谢。 问候。

android BluetoothDevice.getName()返回null

在某个时候,BluetoothDevice.getName()返回null。 我该如何解决它? 在下面的代码中,remoteDeviceName可能为null。 我需要通过remoteDeviceName区分我的设备和其他设备。 BluetoothAdapter.getDefaultAdapter().startLeScan(new LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) { String remoteDeviceName = device.getName(); Log.d("Scanning", "scan device " + remoteDeviceName); });

drawable.setCallback的后果(null);

在尝试实现Drawables的小内存caching时,我了解到,为了避免closures活动后的内存泄漏,我需要解除绑定这些Drawables:将它们的callback设置为null。 因为在每个活动中维护Drawables都需要额外的代码,所以我试图在setImageDrawable(drawable)之后立即解除绑定,到目前为止我没有看到任何结果。 这是来自MyImageView类( extends ImageView )的代码: setImageDrawable(drawable); d.setCallback(null); 在debugging器中,我可以清楚地看到,在第一行callback为空之前,在第一行之后它被设置为这个imageView,之后,我把它设置为空。 这通常显示在那之后.. setCallback (Drawable.Callback cb)文档指出: 将Drawable.Callback对象绑定到此Drawable。 需要支持animation可绘制的客户端。 由于我不需要animation可绘制,所以我不明白为什么我不应该这样做,但是让我感到困扰的是,在几个有关可绘制Android的内存泄漏的博客中,这只是在活动完成之后才完成的。 问题是,为什么在绑定到ImageView时总是自动设置callback? 是否有一些边界条件,那些callback设置为null的drawable会导致问题? 不显示或NPE?

错误:条目中的值为空:blameLogFolder = null

在Gradle构build时,我在Android Studio中遇到这个错误。 '错误:条目中的值为空:blameLogFolder = null' 有人可以帮助解决这个错误。 谢谢。

尝试调用虚拟方法android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()对空对象引用

我的应用程序由4个片段组成,使用FragmentPagerAdapter在父Fragment中加载标签。 问题是当我运行应用程序,然后按回来并重新打开应用程序,我收到此错误日志: FATAL EXCEPTION: main java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler()' on a null object reference at android.support.v4.app.FragmentManagerImpl.ensureExecReady(FragmentManager.java:1949) at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1965) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:620) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:513) … 父代片段内的代码行是: viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager); 和ViewPage和Adapter都不是空! 我不得不提到,我所有的Fragment的生命周期都在被pipe理,并且在适配器内部发生了null问题,并且当我使用Activity作为父代而不是Fragment时,同一个Adapter正常工作!