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());
    }

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)