unfortunately myapp has stopped 원인을 못찾겟어요..
조회수 606회
mainactivity입니다.
package com.example.calc2;
import com.hbe.jnidriver.JNIDriver; import com.hbe.jnidriver.JNIListener; import com.example.calc2.R;
import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;
public class MainActivity extends Activity implements JNIListener{ JNIDriver mDriver = new JNIDriver();
int cnt=1;
boolean mThreadRun = true;
/* 뒤로가기 부분 */
private final long FINISH_INTERVAL_TIME = 2000;
private long backPressedTime = 0;
/* 계산기 부분 */
private CalcEngine calen;
private Button one;
private Button two;
private Button three;
private Button four;
private Button five;
private Button six;
private Button seven;
private Button eight;
private Button nine;
private Button zero;
private Button div;
private Button add;
private Button min;
private Button mul;
private Button equal;
private Button reset;
private Button braket_start;
private Button braket_end;
private Button delete;
private Button Lsh;
private Button Rsh;
private Button or;
private Button and;
private Button ndu;
private Button dou;
private Button dot;
private Button sqrt;
private EditText et;
private TextView etTmp;
private String Exp = "";
private String Check = "";
private StringBuilder et_str;
private StringBuilder etTmp_str;
private int when = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDriver.clearDisplay();
/* 각 버튼과 연산구간을 연결시켜줌 */
zero = (Button)findViewById(R.id.main_btn_0);
one = (Button)findViewById(R.id.main_btn_1);
two = (Button)findViewById(R.id.main_btn_2);
three = (Button)findViewById(R.id.main_btn_3);
four = (Button)findViewById(R.id.main_btn_4);
five = (Button)findViewById(R.id.main_btn_5);
six = (Button)findViewById(R.id.main_btn_6);
seven = (Button)findViewById(R.id.main_btn_7);
eight = (Button)findViewById(R.id.main_btn_8);
nine = (Button)findViewById(R.id.main_btn_9);
div = (Button)findViewById(R.id.main_btn_div);
add = (Button)findViewById(R.id.main_btn_add);
min = (Button)findViewById(R.id.main_btn_min);
mul = (Button)findViewById(R.id.main_btn_multi);
equal = (Button)findViewById(R.id.main_btn_equal);
reset = (Button)findViewById(R.id.main_btn_reset);
braket_start = (Button)findViewById(R.id.main_btn_bStart);
braket_end = (Button)findViewById(R.id.main_btn_bEnd);
delete = (Button)findViewById(R.id.main_btn_del);
Lsh = (Button)findViewById(R.id.Lsh);
Rsh = (Button)findViewById(R.id.Rsh);
or = (Button)findViewById(R.id.or);
and = (Button)findViewById(R.id.and);
ndu = (Button)findViewById(R.id.ndu);
dou = (Button)findViewById(R.id.dou);
dot = (Button)findViewById(R.id.dot);
sqrt = (Button)findViewById(R.id.sqrt);
etTmp = (TextView)findViewById(R.id.main_txtTmp);
et = (EditText)findViewById(R.id.main_editText1);
etTmp.setText("");
et.setText("");
/* 클릭리스너 생성 */
OnClickListener state = new OnClickListener() {
// 숫자 0 부터 9까지는 무조건 화면에 나오게 됩니다.
// 연산식은 숫자가 입력이 한번이상 되어야 연산 입력이 가능케됩니다.
// (detect_input 변수가 판단)
@Override
public void onClick(View v){
if(v.equals(dou))
when=0;
else if(v.equals(ndu))
when=1;
}
};
OnClickListener numClick = new OnClickListener() {
// 숫자 0 부터 9까지는 무조건 화면에 나오게 됩니다.
// 연산식은 숫자가 입력이 한번이상 되어야 연산 입력이 가능케됩니다.
// (detect_input 변수가 판단)
@Override
public void onClick(View v) {
if(v.equals(one)){
et.setText(et.getText() + "1");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(two)){
et.setText(et.getText() + "2");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(three)){
et.setText(et.getText() + "3");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(four)){
et.setText(et.getText() + "4");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(five)){
et.setText(et.getText() + "5");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(six)){
et.setText(et.getText() + "6");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(seven)){
et.setText(et.getText() + "7");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(eight)){
et.setText(et.getText() + "8");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(nine)){
et.setText(et.getText() + "9");
mDriver.setText(2,et.getText().toString());
}else if(v.equals(zero)){
et.setText(et.getText() + "0");
mDriver.setText(2,et.getText().toString());
}
else if(v.equals(dot)){
et.setText(et.getText() + ".");
mDriver.setText(2,et.getText().toString());
}
}
};
OnClickListener function = new OnClickListener(){
@Override
public void onClick(View v) {
if(v.equals(div)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "/");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + "/");
mDriver.setText(1,etTmp.getText().toString());
}
}
}else if(v.equals(add)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "+");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + "+");
mDriver.setText(1,etTmp.getText().toString());
}
}
}else if(v.equals(min)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "-");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str+"-");
mDriver.setText(1,etTmp.getText().toString());
}
}
}else if(v.equals(mul)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "*");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + "*");
mDriver.setText(1,etTmp.getText().toString());
}
}
}
else if(v.equals(Lsh)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "<"+"<");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + "<"+"<");
mDriver.setText(1,etTmp.getText().toString());
}
}
}
else if(v.equals(Rsh)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + ">"+">");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + ">"+">");
mDriver.setText(1,etTmp.getText().toString());
}
}
}
else if(v.equals(or)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "|");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + "|");
mDriver.setText(1,etTmp.getText().toString());
}
}
}
else if(v.equals(and)){
if(et != null)
{
Check = et.getText().toString();
if(Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "&");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
else
{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str + "&");
mDriver.setText(1,etTmp.getText().toString());
}
}
}else if(v.equals(sqrt)){
if(et != null)
{
Check = et.getText().toString();
if(!Check.matches("^.*?\\d$"))
{
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "√");
mDriver.clearDisplay();
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}
}
else{
etTmp.setText(etTmp.getText().toString() + "√");
mDriver.setText(1,etTmp.getText().toString());
}
}else if(v.equals(reset)){
et.setText("");
etTmp.setText("");
mDriver.clearDisplay();
Toast.makeText(getApplicationContext(), "값이 초기화 되었습니다.", Toast.LENGTH_SHORT).show();
}else if(v.equals(equal)){
etTmp.setText(etTmp.getText().toString() + et.getText().toString());
mDriver.setText(1,etTmp.getText().toString());
Exp = etTmp.getText().toString();
calen = new CalcEngine(Exp);
if(when==0){
et.setText(calen.result());
}
else if(when==1){
et.setText((int)Float.parseFloat(calen.result()));
}
mDriver.setText(2,et.getText().toString());
}else if(v.equals(braket_start)){
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + "(");
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}else if(v.equals(braket_end)){
etTmp.setText(etTmp.getText().toString() + et.getText().toString() + ")");
mDriver.setText(1,etTmp.getText().toString());
et.setText("");
}else if(v.equals(delete)){
//Toast.makeText(getApplicationContext(), "준비중", Toast.LENGTH_SHORT).show();
et_str = new StringBuilder();
et_str.append(et.getText());
if(et_str.length() >= 1){
et_str.delete(et_str.length()-1, et_str.length());
et.setText(et_str);
mDriver.setText(2,et.getText().toString());
}
else{
etTmp_str = new StringBuilder();
etTmp_str.append(etTmp.getText());
if(etTmp_str.length() >= 1){
etTmp_str.delete(etTmp_str.length()-1, etTmp_str.length());
etTmp.setText(etTmp_str);
mDriver.setText(1,etTmp.getText().toString());
}
}
}
}
};
zero.setOnClickListener(numClick);
one.setOnClickListener(numClick);
two.setOnClickListener(numClick);
three.setOnClickListener(numClick);
four.setOnClickListener(numClick);
five.setOnClickListener(numClick);
six.setOnClickListener(numClick);
seven.setOnClickListener(numClick);
eight.setOnClickListener(numClick);
nine.setOnClickListener(numClick);
dou.setOnClickListener(state);
ndu.setOnClickListener(state);
div.setOnClickListener(function);
add.setOnClickListener(function);
min.setOnClickListener(function);
mul.setOnClickListener(function);
equal.setOnClickListener(function);
reset.setOnClickListener(function);
braket_start.setOnClickListener(function);
braket_end.setOnClickListener(function);
delete.setOnClickListener(function);
sqrt.setOnClickListener(function);
dot.setOnClickListener(function);
Rsh.setOnClickListener(function);
Lsh.setOnClickListener(function);
or.setOnClickListener(function);
and.setOnClickListener(function);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
mDriver.close1();
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
if(mDriver.open1()<0){
Toast.makeText(MainActivity.this, "Driver Open Failed",
Toast.LENGTH_SHORT).show();
}
super.onResume();
}
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (cnt){
case 1:
if (msg.arg1 == 1)
when=0;
cnt++;
break;
case 2:
if (msg.arg1 == 1)
when=1;
cnt++;
break;
case 3:
if (msg.arg1 == 1)
mDriver.setCursorShift(1);
cnt++;
break;
case 4:
if (msg.arg1 == 1)
mDriver.setCursorShift(0);
cnt++;
break;
case 5:
if (msg.arg1 == 1)
cnt = 1;
break;
}
}
};
@Override
public void onReceive(int val) {
// TODO Auto-generated method stub
Message text = Message.obtain();
text.arg1 = val;
handler.sendMessage(text);
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, 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.
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed(){
long tempTime = System.currentTimeMillis();
long intervalTime = tempTime - backPressedTime;
if(intervalTime >= 0 && FINISH_INTERVAL_TIME >= intervalTime){
super.onBackPressed();
}
else{
backPressedTime = tempTime;
Toast.makeText(getApplicationContext(), "뒤로 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
}
}
}
jni-java입니다. package com.hbe.jnidriver;
import android.util.Log;
public class JNIDriver implements JNIListener { int switch_control[]= {11,14,15,26,22}; private boolean mConnectFlag; private TranseThread mTranseThread; private JNIListener mMainActivity; static { System.loadLibrary("JNIDriver"); } private native static int gpioexport(int gpio); private native static int gpiounexport(int gpio); private native static int gpiosetdir(int gpio, int dir, int val); private native static int DisplayControl(int display_enable); private native static int DisplayClear(); private native static int CursorControl(int cursor_enable); private native static int CursorShift(int set_shift); private native static int Cursorhome(); private native static int DisplayWrite(int line, String str, int len); private native static int initializetextlcd();
private native static int gpiogetval(int gpio);
public JNIDriver() {
mConnectFlag = false;
}
@Override
public void onReceive(int val) {
if(mMainActivity!=null){
mMainActivity.onReceive(val);
}
}
public void setListener(JNIListener a){
mMainActivity = a;
}
public int open1(){
int i=0;
if(mConnectFlag) return -1;
for(i=0; i<5;i++)
if(gpioexport(switch_control[i]) != 0)
return -1;
mConnectFlag = true;
mConnectFlag = true;
mTranseThread = new TranseThread();
mTranseThread.start();
return 0;
}
public int open() {
int i = 0;
if (mConnectFlag)
return -1;
for (i = 104; i < 107; i++) {
gpioexport(i);
gpiosetdir(i, 0, 0);
}
for (i = 150; i < 158; i++) {
gpioexport(i);
gpiosetdir(i, 0, 0);
}
initializetextlcd();
mConnectFlag = true;
return 1;
}
public void close() {
if (!mConnectFlag)
return;
mConnectFlag = false;
}
public void close1() {
int i=0;
if (!mConnectFlag)
return;
mConnectFlag = false;
for(i=0; i<5;i++)
gpiounexport(switch_control[i]);
}
protected void finalize() throws Throwable {
close();
super.finalize();
}
private class TranseThread extends Thread {
int i=0;
@Override
public void run() {
super.run();
try {
while(mConnectFlag){
try {
Log.e("test", "1");
for(i=0;i<5;i++)
onReceive(gpiogetval(switch_control[i]));
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}catch(Exception e){
}
}
}
public void setDisplayVisible(int display_enable) {
DisplayControl(display_enable);
}
public void clearDisplay() {
DisplayClear();
}
public void setCursorVisible(int cursor_enable) {
CursorControl(cursor_enable);
}
public void setCursorShift(int set_shift) {
CursorShift(set_shift);
}
public void setCursorHome() {
Cursorhome();
}
public void setText(int num, String str) {
DisplayWrite(num, str, str.length());
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력