2014-04-04 4 views
0

PHP로 작성된 API를 통해 데이터베이스의 데이터를 쿼리하는 Android 앱을 작성하고 있습니다. 결과를 JSONArray로받습니다. 어떤 이유를 들어JSONArray를 반환하는 동안 Android 예외가 발생했습니다.

이 앱은 JSONArray를 반환 할 때 충돌 유지 :

protected JSONArray doInBackground(String... urls) { 
     try { 
      Log.e("STORES: ", readWSDet()); 
      JSONArray WSDet = new JSONArray(readWSDet()); 
      Log.e("POST: ", WSDet.toString()); 
      return WSDet; 

     } catch (Exception e) { 
      this.exception = e; 
      e.printStackTrace(); 
      Log.e("ERROR:" , this.exception.getMessage()); 
      return null; 
     } 
    } 

모두 "로그"전화는 동일한 코드를 작동하고

[{"id":"0","stop":"18:00:00","price":"99.95","start":"08:00:00","description":"some description","name":"Test","day":"2014-05-04","availability":"9"}] 

의 형태로 적절한 출력을 제공 내 프로젝트 내의 다른 액티비티 : (

디버그 모드에서 모든 단계를 처리하는 앱을 볼 수 있으며 복귀 할 때 catch 절로 점프합니다. 다행히도, 나는 단지 로그에서 예외가 발생하도록 관리하지 않습니다.

어떻게 잘못 될지 감지 할 수있는 힌트가 있습니까?

미리 감사드립니다.

P. 서식 문제를 용서하거나 정보를 누락하는 경우는, 이쪽은 내 첫 번째 질문은 여기하시기 바랍니다)

편집 1 :

로그 캣 충돌까지 창조에서 활동 :

04-04 07:33:20.633: D/dalvikvm(2015): GC_FOR_ALLOC freed 378K, 9% free 4827K/5272K, paused 80ms, total 92ms 
04-04 07:33:21.273: W/Bundle(2015): Key dbid expected String but value was a java.lang.Long. The default value <null> was returned. 
04-04 07:33:21.493: W/Bundle(2015): Attempt to cast generated internal exception: 
04-04 07:33:21.493: W/Bundle(2015): java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String 
04-04 07:33:21.493: W/Bundle(2015):  at android.os.Bundle.getString(Bundle.java:1121) 
04-04 07:33:21.493: W/Bundle(2015):  at com.application.jmgmobile.WorkshopdetailsActivity.onCreate(WorkshopdetailsActivity.java:149) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.Activity.performCreate(Activity.java:5231) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
04-04 07:33:21.493: W/Bundle(2015):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-04 07:33:21.493: W/Bundle(2015):  at android.os.Looper.loop(Looper.java:136) 
04-04 07:33:21.493: W/Bundle(2015):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-04 07:33:21.493: W/Bundle(2015):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 07:33:21.493: W/Bundle(2015):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-04 07:33:21.493: W/Bundle(2015):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-04 07:33:21.493: W/Bundle(2015):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-04 07:33:21.493: W/Bundle(2015):  at dalvik.system.NativeStart.main(Native Method) 
04-04 07:33:22.213: E/STORES:(2015): [{"id":"0","stop":"18:00:00","price":"99.95","start":"08:00:00","description":"some description","name":"Test","day":"2014-05-04","availability":"9"}] 
04-04 07:33:32.933: E/POST:(2015): [{"id":"0","stop":"18:00:00","price":"99.95","start":"08:00:00","description":"some description","name":"Test","day":"2014-05-04","availability":"9"}] 
04-04 07:33:32.943: I/System.out(2015): loaded dataset 
04-04 07:33:32.983: W/ResourceType(2015): No package identifier when getting value for resource number 0x00000000 
04-04 07:33:35.813: D/AndroidRuntime(2015): Shutting down VM 
04-04 07:33:35.813: W/dalvikvm(2015): threadid=1: thread exiting with uncaught exception (group=0xb1aceba8) 
04-04 07:33:36.043: E/AndroidRuntime(2015): FATAL EXCEPTION: main 
04-04 07:33:36.043: E/AndroidRuntime(2015): Process: com.application.jmgmobile, PID: 2015 
04-04 07:33:36.043: E/AndroidRuntime(2015): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.application.jmgmobile/com.application.jmgmobile.WorkshopdetailsActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.os.Looper.loop(Looper.java:136) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at java.lang.reflect.Method.invoke(Method.java:515) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at dalvik.system.NativeStart.main(Native Method) 
04-04 07:33:36.043: E/AndroidRuntime(2015): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.content.res.Resources.getValue(Resources.java:1123) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.content.res.Resources.getDrawable(Resources.java:698) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at com.application.jmgmobile.WorkshopdetailsActivity.onCreate(WorkshopdetailsActivity.java:178) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.Activity.performCreate(Activity.java:5231) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
04-04 07:33:36.043: E/AndroidRuntime(2015):  ... 11 more 

편집 2 : 자바 파일의

전체 코드 :

package com.application.jmgmobile; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.StatusLine; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONObject; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.util.Base64; 
import android.util.Log; 
import android.view.Window; 
import android.widget.EditText; 
import org.apache.http.*; 

import com.google.analytics.tracking.android.EasyTracker; 


class ParseWorkshopdetails extends AsyncTask<String, Void, JSONArray> implements Serializable{ 
    JSONArray ergeniss1 = null; 
    private Exception exception; 
    private String username= ""; 
    private String security_token= ""; 
    private String security_key= ""; 
    private String security= ""; 
    private String dbid= ""; 

    public static final String PREFS_NAME = "JMGMobileSettings"; 
    public ParseWorkshopdetails(Context c) 
    { 
    SharedPreferences settings = c.getSharedPreferences(PREFS_NAME, 0); 
    this.username = settings.getString("username", "none"); 
    this.dbid=settings.getString("dbid", ""); 
    this.security_token = settings.getString("security_token", ""); 
    this.security_key = settings.getString("security_key", "none"); 
    this.security = security_token + ":" + security_key; 

    } 



    public String readWSDet(){ 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("HERE_GOES_MY_URL"); 
     StringBuilder builder = new StringBuilder(); 

     try { 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("dbid", dbid)); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      httppost.setHeader("Authorization", "Basic " + Base64.encodeToString(security.getBytes(), Base64.NO_WRAP)); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 

     try { 
      HttpResponse response = client.execute(httppost); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        builder.append(line); 
       } 
      } else { 
       Log.e(ParseWorkshopdetails.class.toString(), "Failed to download data"); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     //System.out.println(builder.toString()); 

     return builder.toString(); 
    } 

    private void creatListOfStores() { 

     //String readAgentString = readAgents(); 
     try { 
      JSONArray jsonArray = new JSONArray(readWSDet()); 
      Log.i(ParseWorkshopdetails.class.getName(), 
        "Number of entries " + jsonArray.length()); 
      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       Log.i(ParseWorkshopdetails.class.getName(), jsonObject.getString("name")); 

      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    protected JSONArray doInBackground(String... urls) { 
     try { 
      Log.e("STORES: ", readWSDet()); 
      JSONArray WSDet = new JSONArray(readWSDet()); 
      Log.e("POST: ", WSDet.toString()); 
      return WSDet; 

     } catch (Exception e) { 
      this.exception = e; 
      e.printStackTrace(); 
      Log.e("ERROR:" , this.exception.getMessage()); 
      return null; 
     } 
    } 

    protected void onPostExecute(JSONArray objekt) { 
     // TODO: check this.exception 
     this.ergeniss1 = objekt; 

    } 

public JSONArray getErgeniss() { 
    return ergeniss1; 
} 

}

+0

어떤 오류가 생겼습니까? –

+0

로그를 보내주십시오. –

+0

@ Jitesh : 초기 게시물에 logcat을 추가했습니다. @ Bhanu :이 메시지는 execatly wat입니다.) – Kai

답변

0

문제는 가격 필드 인 것으로 보입니다. JSON에서 모든 것은 String이지만이 클래스를 사용하는 경우이 필드는 길어야한다고 생각하므로이 값을 읽을 때 Long.parseLong()을 작성하십시오.

+0

글쎄, 문제가 발생한 곳에서 트릭켓을했습니다 ... 실제로 텍스트 필드에 값을 넣으려는 코드를 모두 제거한 후에는 충돌이 사라졌습니다. 다시 여기서 시작하겠습니다. 이 빠른 답장을 보내 주셔서 감사합니다 !!! – Kai

관련 문제