- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 SO 上有很多这样的内容,但我还有一个给你们。我知道我在某处有一个空指针异常错误,但我不知道在哪里。 Java 不是我最好的语言,所以我有点摸不着头脑。
我的 logcat 看起来像这样:
W/dalvikvm( 6062): threadid=1: thread exiting with uncaught exception (group=0x413e5438)
E/AndroidRuntime( 6062): FATAL EXCEPTION: main
E/AndroidRuntime( 6062): java.lang.NullPointerException
E/AndroidRuntime( 6062): at com.zach.ReportingTool.ReportingTool$1.handleMessage(ReportingTool.java:152)
E/AndroidRuntime( 6062): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 6062): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 6062): at android.app.ActivityThread.main(ActivityThread.java:4918)
E/AndroidRuntime( 6062): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 6062): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 6062): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
E/AndroidRuntime( 6062): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
E/AndroidRuntime( 6062): at dalvik.system.NativeStart.main(Native Method)
E/android.os.Debug( 714): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error
我从一个开源项目中获取了代码 here .该代码用于速度测试应用程序。我真正更改/删除的唯一一件事是删除了动画屏幕顶部的更新进度条,我删除了指示速度是 3g 还是边缘的网络 TextView 。
启动代码按钮看起来像这样:
bSpeed.setOnClickListener(new OnClickListener(){
@Override
public void onClick(final View view) {
confirmation.setText("Test started");
bSpeed.setEnabled(false);
new Thread(mWorker).start();
}
});
其余代码如下所示:
@SuppressLint("HandlerLeak")
private final Handler mHandler=new Handler(){
@Override
public void handleMessage(final Message msg) {
try {
switch(msg.what){
case MSG_UPDATE_STATUS:
final SpeedInfo info1=(SpeedInfo) msg.obj;
speed.setText(String.format(getResources().getString(R.string.update_speed), mDecimalFormater.format(info1.kilobits)));
progress.setText(String.format(getResources().getString(R.string.update_downloaded), msg.arg2, EXPECTED_SIZE_IN_BYTES));
break;
case MSG_UPDATE_CONNECTION_TIME:
conspeed.setText(String.format(getResources().getString(R.string.update_connectionspeed), msg.arg1));
break;
case MSG_COMPLETE_STATUS:
final SpeedInfo info2=(SpeedInfo) msg.obj;
speed.setText(String.format(getResources().getString(R.string.update_downloaded_complete), msg.arg1, info2.kilobits));
progress.setText(String.format(getResources().getString(R.string.update_downloaded), msg.arg1, EXPECTED_SIZE_IN_BYTES));
bSpeed.setEnabled(true);
break;
default:
super.handleMessage(msg);
}
} catch (Exception e) {confirmation.setText("6: " + e.getMessage());}
}
};
private final Runnable mWorker=new Runnable(){
@Override
public void run() {
InputStream stream=null;
try {
int bytesIn=0;
String downloadFileUrl="http://www.gregbugaj.com/wp-content/uploads/2009/03/dummy.txt";
long startCon=System.currentTimeMillis();
URL url=new URL(downloadFileUrl);
URLConnection con=url.openConnection();
con.setUseCaches(false);
long connectionLatency=System.currentTimeMillis()- startCon;
stream=con.getInputStream();
Message msgUpdateConnection=Message.obtain(mHandler, MSG_UPDATE_CONNECTION_TIME);
msgUpdateConnection.arg1=(int) connectionLatency;
mHandler.sendMessage(msgUpdateConnection);
long start=System.currentTimeMillis();
int currentByte=0;
long updateStart=System.currentTimeMillis();
long updateDelta=0;
int bytesInThreshold=0;
while((currentByte=stream.read())!=-1){
bytesIn++;
bytesInThreshold++;
if(updateDelta>=UPDATE_THRESHOLD){
int progress=(int)((bytesIn/(double)EXPECTED_SIZE_IN_BYTES)*100);
Message msg=Message.obtain(mHandler, MSG_UPDATE_STATUS, calculate(updateDelta, bytesInThreshold));
msg.arg1=progress;
msg.arg2=bytesIn;
mHandler.sendMessage(msg);
//Reset
updateStart=System.currentTimeMillis();
bytesInThreshold=0;
}
updateDelta = System.currentTimeMillis()- updateStart;
}
long downloadTime=(System.currentTimeMillis()-start);
if(downloadTime==0){
downloadTime=1;
}
Message msg=Message.obtain(mHandler, MSG_COMPLETE_STATUS, calculate(downloadTime, bytesIn));
msg.arg1=bytesIn;
mHandler.sendMessage(msg);
}
catch (MalformedURLException e) {
confirmation.setText("1: " + e.getMessage());
} catch (Exception e) {
confirmation.setText("2: " + e.getMessage());
}finally{
try {
if(stream!=null){
stream.close();
}
} catch (Exception e) {
confirmation.setText("3: " + e.getMessage());
}
}
}
};
private SpeedInfo calculate(final long downloadTime, final long bytesIn){
SpeedInfo info=new SpeedInfo();
long bytespersecond =(bytesIn / downloadTime) * 1000;
double kilobits=bytespersecond * BYTE_TO_KILOBIT;
double megabits=kilobits * KILOBIT_TO_MEGABIT;
info.downspeed=bytespersecond;
info.kilobits=kilobits;
info.megabits=megabits;
return info;
}
private static class SpeedInfo{
public double kilobits=0;
public double megabits=0;
public double downspeed=0;
}
private static final int EXPECTED_SIZE_IN_BYTES = 1048576;
private static final double BYTE_TO_KILOBIT = 0.0078125;
private static final double KILOBIT_TO_MEGABIT = 0.0009765625;
private Button bSpeed;
private TextView conspeed;
private TextView progress;
private TextView speed;
private TextView confirmation;
private final int MSG_UPDATE_STATUS=0;
private final int MSG_UPDATE_CONNECTION_TIME=1;
private final int MSG_COMPLETE_STATUS=2;
private final static int UPDATE_THRESHOLD=300;
private DecimalFormat mDecimalFormater;
}
我认为错误的来源是 case 语句中的对象。 (ReportingTool.java:152) 指向这一行:
conspeed.setText(String.format(getResources().getString(R.string.update_connectionspeed), msg.arg1));
如果我注释掉该行,它会指向上一个 case 语句中该行上方的 progress.setText()。忽略所有 try/catch block ,我只是想缩小错误的来源范围。
如果有人可以看一下这段代码,将不胜感激,谢谢 -Z
感谢你们的快速回复。调试该行及其周围的行后,conspeed、speed 和 progress 似乎都以空值返回,我没有正确启动它们吗?
为了启动,我更新了所有内容以匹配“oncreate”中的内容:
TextView speed = (TextView) findViewById(R.id.speed);
TextView progress = (TextView) findViewById(R.id.progress);
TextView connectionspeed = (TextView)findViewById(R.id.connectionspeed);
所以现在第 152 行是 connectionspeed.setText()
更新 2
这是Main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/textView3"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/bSip"
android:layout_marginTop="16dp"
android:text="@string/progress" />
<Button
android:id="@+id/bSip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="29dp"
android:text="@string/EnableSip" />
<TextView
android:id="@+id/speed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/progress"
android:text="@string/Speed"/>
<TextView
android:id="@+id/connectionspeed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/speed"
android:text="@string/ConSpeed"/>
<Button
android:id="@+id/bSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/progress"
android:layout_alignParentRight="true"
android:layout_marginRight="30dp"
android:text="@string/SpeedTest" />
<TextView
android:id="@+id/Confirmation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/bmail"
android:layout_marginTop="22dp"
android:fitsSystemWindows="true"
android:maxLines="@integer/MaxLines"
android:scrollHorizontally="false"
android:visibility="visible" />
<Button
android:id="@+id/bmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/connectionspeed"
android:layout_centerHorizontal="true"
android:layout_marginTop="33dp"
android:text="@string/Export" />
<Button
android:id="@+id/bDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/bmail"
android:layout_alignParentBottom="true"
android:text="@string/deleteSelf" />
再次感谢-Z
最佳答案
在有问题的第 152 行上方,执行此操作:
if (conspeed == null){
Log.e("TAG", "conspeed is null!");
}
if (getResources() == null){
Log.e("TAG", "getResources() is null!");
}
if (msg == null){
Log.e("TAG", "msg is null!");
}
conspeed.setText(String.format(getResources().getString(R.string.update_connectionspeed), msg.arg1));
然后您就会知道什么是null
,下一步就是找出原因。
编辑:
我看到您正在使用 findViewById
。在您的 XML 文件中,您是否实际定义了那些具有与您要查找的内容相匹配的 id 字段的 TextView?像这样:android:id="@+id/speed"
编辑 2
嗯,您的 XML 看起来不错。事实上,您在 onCreate()
中执行此操作使我相信您可能只是过早地调用了这些。引用这篇文章:findViewByID returns null
尝试重构您的代码以在您的 UI 的所有内容都已初始化后进行此调用?它可能为 null,因为尚未设置所有内容。
关于java - 未捕获的异常错误android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122068/
多个 ChildException catch block 和一个 Exception catch block 之间哪个更好? 更好,我的意思是以良好的实践方式。 举例说明: public stati
我正在尝试将脱机计算机记录在文本文件中,以便以后可以再次运行它们。似乎没有被记录或捕获。 function Get-ComputerNameChange { [CmdletBinding()]
我正在将 Scala 'try/catch' 测试代码转换为使用 'intercept' 有没有我不应该使用“拦截”的场景?使用 'intercept' 而不是 'try/catch' 的唯一好处是简
我对erlang很陌生,我正在尝试使用基本的try/catch语句来工作。我正在使用Webmachine处理一些请求,我真正想做的就是解析一些JSON数据并将其返回。如果JSON数据无效,我只想返回一
我不知道如何捕获删除按键。我发现在 ASCII 代码表中,它位于 127 位,但是 if (Key = #127) then 却无济于事。 然后我检查了 VK_DELETE 的值,它是 47。尝试使用
我很少在失败时对数据库查询使用唯一的错误消息 我经常使用简短的标准消息,例如“数据库错误/失败。请与网站管理员联系”或类似的消息。或自动发送给我 我正在寻找一种在PDO中全局设置一次try {}和ca
我有一个变量CompletableFuture completableFuture 。我希望能够使用任何类型的对象来完成它。例如:completableFuture.complete(new Stri
我认为这是基本的东西,但我不知道该怎么做。为什么我得到 IOException never throw in body of相应的 try 语句 public static void main(Str
我在此代码中遇到 JSON 异常: JSONObject jObject = new JSONObject(JSONString); pontosUsuario.setIdUsuari
我正在尝试打印出用单引号括起来的文本。 /bin/bash -lc '/home/CASPER_REPORTS/scripts/CASPER_gen_report.sh CASPER_1' /bin/
我这里遇到了一点问题。我想弄清楚如何捕获 IllegalArgumentException。对于我的程序,如果用户输入负整数,程序应该捕获 IllegalArgumentException 并询问用户
我无法理解 EJBTransactionRolledbackException。 我有实体: @Entity public class MyEntity { @Id @Generate
对于我给自己提出的以下挑战,如果社区的经验给我任何建议,我将不胜感激 - 即,这里有任何关于最佳方法/方向的指示吗? 要求 允许收集/实时监控从用户 Windows PC 到一组特定 IP 地址(或
我想在我的 ABAP 代码中捕获并处理 SAPSQL_DATA_LOSS。 我试过这个: try. SELECT * FROM (rtab_name) AS rtab
我知道捕获错误不是一个好的做法,但在这种情况下,这样做很重要。我正在尝试运行一个包含游戏一部分的 jar,但它给了我一个 unsatisfiedlink 错误,但这是有趣的部分:我正在使用这段代码:
我有一个表单页面,当我保存它时,它会覆盖数据库。表单页面中有一个文本框,允许用户输入 4000 个字符,但如果用户输入的字符超过此值,则会出现以下错误: ERROR 15:54:05 Abstrac
我想知道在python中绑定(bind)键的最简单方法 例如,默认的 python 控制台窗口出现并等待,然后在 psuedo -> if key "Y" is pressed: print (
下面是别人写的类。 我面临的问题是,当它进入parse method时与 null as the rawString ,它正在扔NumberFormatException 。 所以我想做的是,我应该捕
我有一个简单的脚本,可以捕获所有鼠标单击,除非您单击实际有效的内容。链接、Flash 视频等。我如何调整它,以便无论用户点击什么,在视频加载、新页面加载等之前,它都会发送我构建的简单 GET 请求?
我有一个带有一些选择列表的表单,当选择某些值时,这些列表将显示/隐藏更多输入字段。 问题是大多数用户都是数据输入人员,因此他们在输入数据时大量使用键盘,并且选择列表的 change 事件仅在焦点离开输
我是一名优秀的程序员,十分优秀!