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

json 관련 질문입니다.

0 추천

우선 오류 메세지 첨부드립니다.

12-26 03:14:08.817: I/CordovaLog(366): Changing log level to DEBUG(3)
12-26 03:14:08.817: D/CordovaActivity(366): CordovaActivity.onCreate()
12-26 03:14:09.457: D/AndroidRuntime(366): Shutting down VM
12-26 03:14:09.457: W/dalvikvm(366): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-26 03:14:09.487: E/AndroidRuntime(366): FATAL EXCEPTION: main
12-26 03:14:09.487: E/AndroidRuntime(366): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wiki.wikitree/com.wiki.wikitree.MainActivity}: java.lang.NullPointerException
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.os.Looper.loop(Looper.java:123)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at java.lang.reflect.Method.invokeNative(Native Method)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at java.lang.reflect.Method.invoke(Method.java:507)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at dalvik.system.NativeStart.main(Native Method)
12-26 03:14:09.487: E/AndroidRuntime(366): Caused by: java.lang.NullPointerException
12-26 03:14:09.487: E/AndroidRuntime(366): 	at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:112)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at org.json.JSONTokener.nextValue(JSONTokener.java:90)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at org.json.JSONObject.<init>(JSONObject.java:154)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at org.json.JSONObject.<init>(JSONObject.java:171)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at com.wiki.wikitree.MainActivity.onCreate(MainActivity.java:36)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-26 03:14:09.487: E/AndroidRuntime(366): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-26 03:14:09.487: E/AndroidRuntime(366): 	... 11 more
12-26 03:14:12.867: D/dalvikvm(366): GC_CONCURRENT freed 1160K, 57% free 2959K/6727K, external 1625K/2137K, paused 6ms+23ms
12-26 03:14:13.477: I/dalvikvm(366): Total arena pages for JIT: 11
12-26 03:14:17.567: I/Process(366): Sending signal. PID: 366 SIG: 9

 

그리고 json소스를 빼면 잘돌아갑니다..

해당 소스입니다.

String url = "file:///android_asset/www/index.html";  
        
        Intent intent = getIntent();
		Bundle extra = intent.getExtras();
		String jsonData = extra.getString("com.parse.Data");
			
        try {		
			JSONObject json = new JSONObject(jsonData);
			url = json.getString("url");
		} catch (JSONException e) {
			e.printStackTrace();
		}

 

간략 설명드리고 전체소스첨부할꼐요..

폰갭으로 패킹하고 있구욧.

푸시는 PARSE.COM의 것을 사용하고 있습니다.

푸시에 담긴 데이타 추출할수있다고 하여 짠 부분입니다.

 

앱이 그냥 죽어버려 테스트를 할수가 없네요 ㅠㅠ

 

고수님들 도와주세요 ㅠㅠ

 

MainActivity.java

import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import com.parse.*;
import org.apache.cordova.*;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends DroidGap {
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		//parse.com을 이용한 푸시알림
        Parse.initialize(this, "xxxxxxxx", "xxxxxxxx"); 
        PushService.setDefaultPushCallback(this, MainActivity.class); 
        ParseInstallation.getCurrentInstallation().saveInBackground();
        ParseAnalytics.trackAppOpened(getIntent());
        PushService.subscribe(this, "", MainActivity.class);  
        
        String url = "file:///android_asset/www/index.html";  
        
        Intent intent = getIntent();
		Bundle extra = intent.getExtras();
		String jsonData = extra.getString("com.parse.Data");
			
        try {		
			JSONObject json = new JSONObject(jsonData);
			url = json.getString("url");
		} catch (JSONException e) {
			e.printStackTrace();
		}
       
		super.loadUrl(url);
		
			    
	       
	}	
	

}

 

AndroidMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxxx.xxxx"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="17" />
	
    <supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:resizeable="true" android:anyDensity="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="xxxx"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.xxxx.xxxx.MainActivity"
            android:label="xxxx" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="com.parse.PushService" />
			<receiver android:name="com.parse.ParseBroadcastReceiver">
  			<intent-filter>
   				 <action android:name="android.intent.action.BOOT_COMPLETED" />
   				 <action android:name="android.intent.action.USER_PRESENT" />
   				   <action android:name="com.xxxx.xxxx.UPDATE_STATUS" />  
  			</intent-filter>
		</receiver>
    </application>

</manifest>

 

장포크 (260 포인트) 님이 2013년 12월 27일 질문

2개의 답변

0 추천
 
채택된 답변

자체 해결했습니다.

 

jsonObject json 이녀석이 null이라

 
 Intent intent = getIntent();
        try {
        Bundle extra = intent.getExtras();        
        String data = extra.getString("com.parse.Data");
        if(data !=null){
        JSONObject json = new JSONObject(data);
        url = json.getString("url");
        }        
        } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
 
 
jsonObject는 null값이면 안된다는걸 배웠네요 ㅎㅎ;
 
장포크 (260 포인트) 님이 2013년 12월 27일 답변
0 추천

super.loadUrl(url); 이건 뭐죠? 이거 빼고 해보세요

Gradler (109,780 포인트) 님이 2013년 12월 27일 답변
그건 phonegap에서 url불러오는거예요..

Intent intent = getIntent();
        Bundle extra = intent.getExtras();
        String jsonData = extra.getString("com.parse.Data");
             
        try {       
            JSONObject json = new JSONObject(jsonData);
            url = json.getString("url");
        } catch (JSONException e) {
            e.printStackTrace();
        }

이거만 추가하면 죽어요 정확하겐

  try {       
            JSONObject json = new JSONObject(jsonData);
            url = json.getString("url");
        } catch (JSONException e) {
            e.printStackTrace();
        }

이 try {} catch {}를 넣으면 앱이 죽습니다 ㅠㅠ
super.loadUrl(url); 을 String url = "file:///android_asset/www/index.html"; 바로 밑에다가 옮겨보심이..
에러로그를 보면 저기에서 널포인트로 죽고 있습니다.
아 줄수가 안맞아서 잘못보셧군요 ㅠ
try에서 걸린거였습니다.

jsonObject json 이녀석이 null이라

 Intent intent = getIntent();
        try {
        Bundle extra = intent.getExtras();        
        String data = extra.getString("com.parse.Data");
        if(data !=null){
        JSONObject json = new JSONObject(data);
        url = json.getString("url");
        }        
        } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

요렇게 해결했씁니다
신경써주셔서 감사합니다 ㅎㅎ
...