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

코드에 아무문제가 없는데 앱이 러닝이 안되네요 ....

0 추천

초보개발자인데 로그좀 봐주시면 감사하겠습니다 .....

저기 로그에 나와있는 main 41번째 줄 코드도 올려드리겠습니다 ..

package com.example.homework.step09_sendreceiver2;

import android.content.Intent;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        setTitle("데이터베이스를 연동한 ListView");
        ListView listView=(ListView)findViewById(R.id.listView);

        String result=SendByHttp();
        String[][] parseData=jsonParserList(result);  //json 데이터 파싱

        String[] member=new String[parseData.length];
        for(int i=0; i<member.length; i++) {
            member[i]="이름:" + parseData[i][0]
                    +"    나이:" + parseData[i][1]
                    +"    점수:" + parseData[i][2];
        }
        //listView에 출력------------------------------------------
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, member);
        listView.setAdapter(adapter);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        MenuInflater menuInflater=getMenuInflater();
        menuInflater.inflate(R.menu.menu1, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId())
        {
            case R.id.listAll:
                Intent intent1=new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent1);
                break;
            case R.id.insert:
                Intent intent2=new Intent(getApplicationContext(), InsertActivity.class);
                startActivity(intent2);
                break;
        }
        return false;
    }

    // 서버에 데이터를 보내는 메소드
    private String SendByHttp() {

        String strUrl = "http://192.168.43.185:8888/step9_MyServer/JSONServerList.jsp";
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet get=new HttpGet(strUrl);


        try {
            //데이터 보낸 뒤 서버에서 데이터를 받아오는 과정
            HttpResponse response = client.execute(get);
            BufferedReader bufreader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),"utf-8"));

            String line = null;
            String result = "";

            while ((line = bufreader.readLine()) != null) {
                result += line;
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            client.getConnectionManager().shutdown();
            return "";
        }
    }


    //받은 JSON 객체를 파싱하는 메소드
    private String[][] jsonParserList(String pRecvServerPage) {

        Log.i("서버에서 받은 전체 내용 : ", pRecvServerPage);

        try {
            JSONObject json = new JSONObject(pRecvServerPage);
            JSONArray jArr = json.getJSONArray("List");

            // 받아온 pRecvServerPage를 분석하는 부분
            String[] jsonName = {"name", "age", "score"};
            String[][] parseredData = new String[jArr.length()][jsonName.length];
            for (int i = 0; i < jArr.length(); i++) {
                json = jArr.getJSONObject(i);

                for (int j = 0; j < jsonName.length; j++) {
                    parseredData[i][j] = json.getString(jsonName[j]);
                }
            }

            // 분해 된 데이터를 확인하기 위한 부분
            for (int i = 0; i < parseredData.length; i++) {
                Log.i("JSON을 분석한 데이터 " + i + " : ", parseredData[i][0]);
                Log.i("JSON을 분석한 데이터 " + i + " : ", parseredData[i][1]);
                Log.i("JSON을 분석한 데이터 " + i + " : ", parseredData[i][2]);
            }

            return parseredData;
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }
}

 

천수교 (210 포인트) 님이 2018년 5월 17일 질문

1개의 답변

+1 추천
NullPointerException로그가 보이는게, 41번의 객체가 null인 것으로 보입니다.

서버에서 내려온 json 메세지를 파싱하는데 오류가 되서 null이 반환되는 듯 하니. 확인 해 보세요.
익명사용자 님이 2018년 5월 17일 답변
근데 앱이 아에 실행이 안되는데 그거랑 관련이 있는건가요 ???
앱이 실행되자마자 바로 죽을거 같네요.
어떻게 해결하나요 json 파싱에서 오류가 나는거는 알겠는데 어떻게 해결하는지 모르겠네요 ,, 서버랑 db 는 연동이 잘됩니다 안드로이드랑 서버연동에서 문제가 생기는것 같습니다 .
// 서버에 데이터를 보내는 메소드
    private String SendByHttp() {
 
        String strUrl = "http://192.168.43.185:8888/step9_MyServer/JSONServerList.jsp";
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet get=new HttpGet(strUrl);
 
 
        try {
            //데이터 보낸 뒤 서버에서 데이터를 받아오는 과정
            HttpResponse response = client.execute(get);
            BufferedReader bufreader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),"utf-8"));
 
            String line = null;
            String result = "";
 
            while ((line = bufreader.readLine()) != null) {
                result += line;
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            client.getConnectionManager().shutdown();
            return "";
        }
    }

여기 catch log 찍어서 보여주실수있으신가요?
그리고..  네트워크 통신할때는 strictmode 쓰지마시고 asynctask 쓰세여..
개인적인 작업할때는 문제안되는데 추후 회사에서 프로젝트할시 네트워크 작업할때 메인스레드에서 바로 돌려버리면 평생먹을욕 다드실지도몰라여 ㅎㅎ
아 정말 감사합니다 .. 제가 시작한지 얼마안되서 .. 모르는게 많습니다. 열심히 배우도록 하겠습니다 . catch log 어떻게 찍는지 알려주시면 .. 바로 올려드리겠습니다 가르쳐주세요,,
catch 문안에다가
Log.e("JSON ERROR==>", e.getMessage());

해보시고 로그에 json error  보여줘보세영
05-21 10:41:11.414 20890-20890/? E/Zygote: isWhitelistProcess - Process is Whitelisted
05-21 10:41:11.415 20890-20890/? E/libpersona: scanKnoxPersonas
    Couldn't open the File - /data/system/users/0/personalist.xml - No such file or directory
05-21 10:41:11.416 20890-20890/? W/SELinux: SELinux selinux_android_compute_policy_index : Policy Index[2],  Con:u:r:zygote:s0 RAM:SEPF_SM-G965N_8.0.0_0001, [-1 -1 -1 -1 0 1]
05-21 10:41:11.417 20890-20890/? I/SELinux: SELinux: seapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=com.example.homework.step09_sendreceiver2
05-21 10:41:11.419 20890-20890/? I/zygote64: Late-enabling -Xcheck:jni
05-21 10:41:11.449 20890-20890/? D/TimaKeyStoreProvider: TimaKeyStore is not enabled: cannot add TimaSignature Service and generateKeyPair Service
05-21 10:41:11.450 20890-20890/? D/ActivityThread: Added TimaKeyStore provider
05-21 10:41:11.518 20890-20898/? I/zygote64: Debugger is no longer active
05-21 10:41:11.541 20890-20908/? D/libEGL: loaded /vendor/lib64/egl/libGLES_mali.so
05-21 10:41:11.616 20890-20890/? D/TcpOptimizer: TcpOptimizer-ON
05-21 10:41:11.794 20890-20890/? I/서버에서 받은 전체 내용 :: <!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> &#47;step9_MyServer&#47;JSONServerList.jsp</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/8.5.30</h3></body></html>
05-21 10:41:11.794 20890-20890/? W/System.err: org.json.JSONException: Value <!doctype of type java.lang.String cannot be converted to JSONObject
at org.json.JSON.typeMismatch(JSON.java:111)
        at org.json.JSONObject.<init>(JSONObject.java:163)
05-21 10:41:11.795 20890-20890/? W/System.err:     at org.json.JSONObject.<init>(JSONObject.java:176)
        at com.example.homework.step09_sendreceiver2.MainActivity.jsonParserList(MainActivity.java:115)
        at com.example.homework.step09_sendreceiver2.MainActivity.onCreate(MainActivity.java:39)
        at android.app.Activity.performCreate(Activity.java:7174)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
05-21 10:41:11.796 20890-20890/? W/System.err:     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
05-21 10:41:11.796 20890-20890/? D/AndroidRuntime: Shutting down VM
05-21 10:41:11.797 20890-20890/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.homework.step09_sendreceiver2, PID: 20890
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.homework.step09_sendreceiver2/com.example.homework.step09_sendreceiver2.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2955)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.NullPointerException: Attempt to get length of null array
        at com.example.homework.step09_sendreceiver2.MainActivity.onCreate(MainActivity.java:41)
        at android.app.Activity.performCreate(Activity.java:7174)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6938) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
Json error ==>  는 안보이는거 같습니다 .. 로그로 이런게 찍혀서 나오고 앱은 그냥 중지되었다고 하면서 실행이 안되네요..
I/서버에서 받은 전체 내용 :: <!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title>

로그에서 404에러가 나는걸로 보아 호출페이지 자체에 문제가 있네요. http://192.168.43.185:8888/step9_MyServer/JSONServerList.jsp 자체에 문제가 있거나 같은 와이파이가 아니라서 폰에서는 페이지로 연결이 안되는거 같네요
...