SOにはこれらがたくさんあることは知っていますが、皆さんのためにもう1つあります。どこかにnullポインタ例外エラーがあることは知っていますが、どこにあるのかわかりません。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
ここでオープンソースプロジェクトからコードを取得しました。このコードは、速度テストアプリケーション用です。私が実際に変更/削除したのは、アニメーション化された画面の上部にある更新プログレスバーを削除することだけで、速度が3gかエッジかを示すネットワークテキストビューを削除しました。
コードを開始するには、ボタンは次のようになります。
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ブロックを無視して、エラーの原因を絞り込もうとしていました。
誰かがこのコードを見ることができれば、それは大いにありがたいです、ありがとう-Z
アップデート
迅速な対応ありがとうございます。その行とその周辺の行をデバッグした後、conspeed、speed、progressがすべてnull値で返されているように見えますが、正しく開始していませんか?
開始するには、「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