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

안드로이드 스튜디오 NullpointerException 질문!!

0 추천
package com.example.home.multitabapp;

        import android.app.ProgressDialog;
        import android.content.DialogInterface;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.support.annotation.Nullable;
        import android.support.v7.app.AlertDialog;
        import android.support.v7.app.AppCompatActivity;
        import android.text.TextUtils;
        import android.transition.TransitionManager;
        import android.util.Log;
        import android.view.Gravity;
        import android.view.View;
        import android.widget.CompoundButton;
        import android.widget.EditText;
        import android.widget.ImageButton;
        import android.widget.ImageView;
        import android.widget.ListAdapter;
        import android.widget.ListView;
        import android.widget.SimpleAdapter;
        import android.widget.Switch;
        import android.widget.TextView;
        import android.widget.Toast;

        import org.json.JSONArray;
        import org.json.JSONException;
        import org.json.JSONObject;

        import java.io.BufferedReader;
        import java.io.BufferedWriter;
        import java.io.InputStream;
        import java.io.InputStreamReader;
        import java.io.OutputStream;
        import java.io.OutputStreamWriter;
        import java.net.HttpURLConnection;
        import java.net.URL;
        import java.net.URLConnection;
        import java.net.URLEncoder;
        import java.util.ArrayList;
        import java.util.HashMap;
        import java.util.Iterator;
        import java.util.Scanner;


/**
 * Created by home on 2018-01-17.
 */

public class MultitapActivity extends AppCompatActivity {



    ImageButton multiBackBtn;  //뒤로가기 버튼
    Switch multiSwitch1, multiSwitch2;  //스위치
    ImageView multitapImg1, multitapImg2;   //멀티탭 ON/OFF 확인 이미지(검정/빨강)
    ImageView changeMutiInfo, multiUpdate;   //멀티탭 위치 변경, 업데이트 아이콘
    TextView machValueTxt1, machValueTxt2;
    TextView totalUseValueTxt2;

   


    //php 변수
    private static String TAG = "phptest_MainActivity";
    private static final String TAG_JSON="webnautes";
    private static final String NUM = "num";


    private static final String mA1 ="mA1";
    private static final String FLAG1 ="flag1";

    private static final String mA2 ="mA2";
    private static final String FLAG2 ="flag2";
    private TextView mTextViewResult;
    ArrayList<HashMap<String, String>> mArrayList;
    ListView mlistView;
    String mJsonString;
    private static int flag1=0, flag2=0;
    HashMap<String,String> hashMap;

    private static int state1 = 0;
    private static int state2 = 0;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mutitap_page);
        setTitle("멀티탭");

        multiBackBtn = (ImageButton)findViewById(R.id.multiBackBtn);
        multiSwitch1 = findViewById(R.id.multiSwitch1);
        multiSwitch2 = findViewById(R.id.multiSwitch2);
        multitapImg1 = findViewById(R.id.multitapImg1);
        multitapImg2 = findViewById(R.id.multitapImg2);
        changeMutiInfo = findViewById(R.id.changeMutiInfo);
        multiUpdate = findViewById(R.id.multiUpdate);

        //실행 되면서 서버의 값을 가져와서 init
        GetData tasks = new GetData();
        tasks.execute("http://192.168.0.12/getjson.php");



        //뒤로 가기 버튼 클릭 시00
        multiBackBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
                TransitionManager.go(MainActivity.mainPage);
            }
        });

        //첫번째 스위치 클릭 시
        multiSwitch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

                GetData tasks = new GetData();
                tasks.execute("http://192.168.0.12/getjson.php");
                int value = Integer.parseInt(hashMap.get(FLAG1).toString());

                if(value == 1){ //활성화 되지 않았다면 켠다
                    //서버에 값을 바꿔준다.
                    multitapImg1.setImageResource(R.drawable.circle_black);
                    // multiSwitch1.setChecked(false);
                    state1 = 0;

                }
                else { //활성화 돼있으면 끈다
                    multitapImg1.setImageResource(R.drawable.circle_red);
                    // multiSwitch1.setChecked(true);
                    state1 = 1;

                }




                try {


                    //String param = "flag2=" + URLEncoder.encode(state, "UTF-8");
                    URL url = new URL("http://192.168.0.12/androidRcv1.php" +"?" +"flag1="+state1);
                    URLConnection conn = url.openConnection();
                    conn.setUseCaches(false);
                    InputStream is = conn.getInputStream();
                    Scanner scan = new Scanner(is);

                    int line =1;
                    while(scan.hasNext()) {
                        String str = scan.nextLine();

                    }
                    Log.d(TAG, "상태 : " + state1);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d(TAG,"전송 에러남..ㅋㅋ");
                } finally {

                }
            }
        });

        //두번째 스위치 클릭 시
        multiSwitch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

                GetData tasks = new GetData();
                tasks.execute("http://192.168.0.12/getjson.php");
                int value = Integer.parseInt(hashMap.get(FLAG2).toString());

                if(value == 1){ //활성화 되지 않았다면 켠다
                    //서버에 값을 바꿔준다.

                    multitapImg2.setImageResource(R.drawable.circle_black);
                    multiSwitch2.setChecked(false);
                    state2 = 0;

                }
                else { //활성화 돼있으면 끈다

                    multitapImg2.setImageResource(R.drawable.circle_red);
                    multiSwitch2.setChecked(true);
                    state2 = 1;


                }




                try {


                    //String param = "flag2=" + URLEncoder.encode(state, "UTF-8");
                    URL url = new URL("http://192.168.0.12/androidRcv.php" +"?" +"flag2="+state2);
                    URLConnection conn = url.openConnection();
                    conn.setUseCaches(false);
                    InputStream is = conn.getInputStream();
                    Scanner scan = new Scanner(is);

                    int line =1;
                    while(scan.hasNext()) {
                        String str = scan.nextLine();

                    }
                    Log.d(TAG, "상태 : " + state2);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d(TAG,"전송 에러남..ㅋㅋ");
                } finally {

                }



            }
        });

        
       


   

       
   

 

 

앱에서 SWITCH버튼을 클릭? OFF->ON으로 해주면 앱이 튕기고 NullPointerException현상이 발생합니다...

스위치는 flag1, flag2값을 받아서 켜져있는지 꺼져있는지 확인하구 그 값대로 움직이는데...

자바 및 안드로이드에 대한 기초가 하나도 없어 어디가 null값이고 왜 에러가 생기는지 모르겠습니다..!

도움을 주시면 정말 감사드리겠습니다..!

LEE 님이 2018년 6월 13일 질문
로그캣 입니다...!

06-13 06:17:34.143 5459-5459/com.example.home.multitabapp E/InputEventReceiver: Exception dispatching input event.
06-13 06:17:34.143 5459-5459/com.example.home.multitabapp D/AndroidRuntime: Shutting down VM
06-13 06:17:34.147 5459-5459/com.example.home.multitabapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                            Process: com.example.home.multitabapp, PID: 5459
                                                                            java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.HashMap.get(java.lang.Object)' on a null object reference
                                                                                at com.example.home.multitabapp.MultitapActivity$2.onCheckedChanged(MultitapActivity.java:123)
                                                                                at android.widget.CompoundButton.setChecked(CompoundButton.java:171)
                                                                                at android.widget.Switch.setChecked(Switch.java:1075)
                                                                                at android.widget.Switch.stopDrag(Switch.java:1036)
                                                                                at android.widget.Switch.onTouchEvent(Switch.java:986)
                                                                                at android.view.View.dispatchTouchEvent(View.java:11725)
                                                                                at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
                                                                                at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
                                                                                at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
                                                                                at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
                                                                                at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
                                                                                at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
                                                                                at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
                                                                                at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
                                                                                at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
                                                                                at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
                                                                                at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2961)
                                                                                at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2650)
                                                                                at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:445)
                                                                                at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1828)
                                                                                at android.app.Activity.dispatchTouchEvent(Activity.java:3292)
                                                                                at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
                                                                                at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:407)
                                                                                at android.view.View.dispatchPointerEvent(View.java:11964)
                                                                                at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4776)
                                                                                at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4590)
                                                                                at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128)
                                                                                at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181)
                                                                                at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147)
                                                                                at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4274)
                                                                                at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155)
                                                                                at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4331)
                                                                                at
android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128)
                                                                                at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4181)
                                                                                at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4147)
                                                                                at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4155)
                                                                                at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4128)
                                                                                at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6642)
                                                                                at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6616)
                                                                                at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6577)
                                                                                at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6745)
                                                                                at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
                                                                                at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
                                                                                at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
                                                                                at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:6716)
                                                                                at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:6768)
                                                                                at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                                                                                at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                                                                                at android.view.Choreographer.doFrame(Choreographer.java:652)
                                                                                at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
06-13 06:17:34.147 5459-5459/com.example.home.multitabapp E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:789)
                                                                                at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                                at android.os.Looper.loop(Looper.java:164)
                                                                                at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                                at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

1개의 답변

0 추천
스위치에서 접근하는 HashMap이 선언이 안된상태입니다.

공간만 잡혀있고 데이터가 존재하지 않아서 null error가 뜹니다

hashmap변수에 객체가 생성되서 데이터가 입력되는 부분이 안보입니다.
익명사용자 님이 2018년 6월 13일 답변
...