마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 만보기 질문이여

0 추천
package app.manbo;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
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 {



 EditText vi;

 Button btn_reset;

 int count = 0;

 String str = String.format("%d",count);


 Button btnStopService;

 Intent intentMyService;

 BroadcastReceiver receiver;

 boolean flag = true;

 Toast toast;

 TextView CountText;

 String serviceData;

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  intentMyService = new Intent(this, MyServiceIntent.class);
  // 실행되기 원하는 서비스 등록

  receiver = new MyMainLocalRecever();

  CountText = (TextView) findViewById(R.id.textView01);

  btnStopService = (Button) findViewById(R.id.btnStopService);
  // 서비스 중지
  btn_reset = (Button)findViewById(R.id.btn_reset);
  // 서비스 초기화
  
    btn_reset.setOnClickListener(new OnClickListener() {

           




    public void onClick(View v) {

     // TODO Auto-generated method stub

     count = 0;

     

     str = String.format("%d", count);

     vi.setText(str);

    }

            });


  btnStopService.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {

    if (flag) {

     btnStopService.setText("Stop !!");

     // TODO Auto-generated method stub
     try {

      IntentFilter mainFilter = new IntentFilter(
        "com.androday.test.step");

      registerReceiver(receiver, mainFilter);

      startService(intentMyService);
      // txtMsg.setText("After stoping Service:\n"+service.getClassName());
      Toast.makeText(getApplicationContext(), "서비스 시작", 1)
        .show();
     } catch (Exception e) {
      // TODO: handle exception
      Toast.makeText(getApplicationContext(), e.getMessage(),
        1).show();
     }
    }

    else {

     btnStopService.setText("Go !!");

     // TODO Auto-generated method stub
     try {

      unregisterReceiver(receiver);

      stopService(intentMyService);

      Toast.makeText(getApplicationContext(), "서비스 중지", 1)
        .show();
      // txtMsg.setText("After stoping Service:\n"+service.getClassName());
     } catch (Exception e) {
      // TODO: handle exception
      Toast.makeText(getApplicationContext(), e.getMessage(),
        1).show();
     }
    }

    flag = !flag;

   }
  });

 }

 class MyMainLocalRecever extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
   // TODO Auto-generated method stub

   serviceData = intent.getStringExtra("serviceData");

   CountText.setText(serviceData);

   Toast.makeText(getApplicationContext(), "Walking . . . ", 1).show();

  }

 }

}

여기서 버튼 리셋이 숫자 카운트한거를 0으로 초기화 시키는건데 어플실행하여 초기화버튼을 누르면 어플이 중지가 됩니다. 어떤점이 잘못되었는지 전문가님들 확인부탁드립니다.

익명사용자 님이 2015년 7월 21일 질문
전문가는 아니라서 어느부분에 오류가 있는지 코드만 봐서는 잘 모르겠습니다만,

전문가분들도 이것만 보고는 바로 알아내기 힘듦니다.

로그캣에 찍힌 내용을 올리시면 답변해주시는 분들이 더욱 빠르고 정확하게 해결방법을 제시해주실 수 있을 것 같네요~

2개의 답변

0 추천
로그첨부하시면 좀더 명확한 답이 나올겁니다.

예상으로는 UI 갱신하는데 UIThread에서 안돌려서 생기는 문제 같은데요.

UIThread 문제라면, UI 갱신하는 부분을 Runable로 만들어서 runOnUIThread 로 돌리시면 해결 될 겁니다.
ㄱㄴㄷ 님이 2015년 7월 21일 답변
0 추천
전체 코드가 맞나요?

코드상은  EditText vi; 의 vi 변수에 레이아웃 값을 할당하는 부분이 안보이는데요...

그래서 리셋 버튼 누르면,  vi.setText(str); 에서 nullPoinerException이 발생한게 아닐까 합니다.
사악미소 (65,330 포인트) 님이 2015년 7월 21일 답변
...