서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.
NDK 초반에 pluscalc 어플을 따라 만들었습니다.
그런데 setOnClickListener 에서 문제가 발생합니다.
이녀석만 없으면 실행은 잘 되고,, 이녀석이 있으면 어플 실행 도중에 강제종료 되고요.
우선 API 19 android 4.4 으로 만들었고요
버전 문제인줄 알았는데 핸드폰 버전에 맞춰서 해도 setOnClickListener 에서 문제가 발생합니다.
우선 밑의 소스는 pluscalcActivity.java 이고..
package com.example.pluscalc;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
public class PluscalcActivity extends ActionBarActivity implements View.OnClickListener{
TextView tv;
EditText etFirst;
EditText etSecond;
plusForJNI pfj;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pluscalc);
//setContentView(R.layout.fragment_pluscalc);
tv = (TextView)findViewById(R.id.result);
etFirst = (EditText)findViewById(R.id.firstfield);
etSecond = (EditText)findViewById(R.id.secondfield);
pfj = new plusForJNI();
View btn;
btn = findViewById(R.id.Button01);
btn.setOnClickListener(this);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.pluscalc, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onClick(View v)
{
String first = etFirst.getText().toString();
String second = etSecond.getText().toString();
int aa = Integer.decode(first);
int bb = Integer.decode(second);
tv.setText("" + pfj.addCalc(aa, bb));
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_pluscalc,
container, false);
return rootView;
}
}
}
이건 로그캣에 뜬 내용들 입니다...
W/dalvikvm(28478): threadid=1: thread exiting with uncaught exception (group=0x4142c2a0)
E/AndroidRuntime(28478): FATAL EXCEPTION: main
E/AndroidRuntime(28478): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pluscalc/com.example.pluscalc.PluscalcActivity}: java.lang.NullPointerException
E/AndroidRuntime(28478): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
E/AndroidRuntime(28478): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
E/AndroidRuntime(28478): at android.app.ActivityThread.access$700(ActivityThread.java:140)
E/AndroidRuntime(28478): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
E/AndroidRuntime(28478): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(28478): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(28478): at android.app.ActivityThread.main(ActivityThread.java:4921)
E/AndroidRuntime(28478): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(28478): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(28478): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
E/AndroidRuntime(28478): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
E/AndroidRuntime(28478): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(28478): Caused by: java.lang.NullPointerException
E/AndroidRuntime(28478): at com.example.pluscalc.PluscalcActivity.onCreate(PluscalcActivity.java:36)
E/AndroidRuntime(28478): at android.app.Activity.performCreate(Activity.java:5206)
E/AndroidRuntime(28478): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
E/AndroidRuntime(28478): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
E/AndroidRuntime(28478): ... 11 more
로그캣 봐도 잘 모르겠고.. 디버깅 해도 왜 여기서 멈추는 지도 모르겠습니다..
NullPointerException 이발생하다는건 알겠는데 왜 이런 오류가 발생하는지 ...
핸드폰 문제인가 아니면... 코드가 문제인지..제가 실수로 잘 못 입력했다는지..
혹시 해서 그냥 버튼만 만들어도 setOnClickListener 에서 문제가 발생하는데요.
최신 버전에서의 차이 때문일까요?
btn을 Button으로 define하시고 findviewbyid에서 나온것을 Button으로 캐스팅해서 넣으세요