2013-03-18 7 views
1

저는 android 응용 프로그램 개발에 익숙하며 작동하는 응용 프로그램을 개발하려고합니다. 그러나 내가 만든이 페이지는 그것이 만들어 졌기 때문에 문제를주고 있으며, 누군가가 이것으로 나를 도울 수 있기를 바랍니다. 이 프로그램을 실행할 때마다 응용 프로그램 강제 종료됩니다. android : Force Closes

는 소스 코드입니다

public class Latest extends ListActivity { 

// Progress Dialog 
private ProgressDialog pDialog; 

// Creating JSON Parser object 
JSONParser jParser = new JSONParser(); 

ArrayList<HashMap<String, String>> eventsList; 

// url to get all products list 
private static String url_all_products = "http://"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_BOOKS = "books"; 
private static final String TAG_TITLE = "title"; 
private static final String TAG_AUTHOR = "author"; 
private static final String TAG_DESCRIPTION = "description"; 
private static final String TAG_PRICE = "price"; 
private static final String TAG_DISCOUNT = "discount"; 
private static final String TAG_CATEGORY = "category"; 
private static final String TAG_PID = "pid"; 

// products JSONArray 
JSONArray events = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_latest); 

    // Hashmap for ListView 
    eventsList = new ArrayList<HashMap<String, String>>(); 

    // Loading products in Background Thread 
    new LoadAllProducts().execute(); 

    // Get listview 
// ListView lv = getListView(); 



} 

// Response from Edit Product Activity 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    // if result code 100 
    if (resultCode == 100) { 
     // if result code 100 is received 
     // means user edited/deleted product 
     // reload this screen again 
     Intent intent = getIntent(); 
     finish(); 
     startActivity(intent); 
    } 

} 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
class LoadAllProducts extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(Latest.this); 
     pDialog.setMessage("Loading Books. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    /** 
    * getting All products from url 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); 

     // Check your log cat for JSON reponse 
     Log.d("All Products: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // products found 
       // Getting Array of Products 
       events = json.getJSONArray(TAG_BOOKS); 

       // looping through All Products 
       for (int i = events.length()-1; i > events.length()-4; i--) { 
        JSONObject c = events.getJSONObject(i); 

        // Storing each json item in variable 
        String pid = c.getString(TAG_PID); 
        String title = c.getString(TAG_TITLE); 
        String author = "Author :" +c.getString(TAG_AUTHOR); 
        String description = c.getString(TAG_DESCRIPTION); 
        String price = "Price :" +c.getString(TAG_PRICE); 
        String discount = "Discount : " +c.getString(TAG_DISCOUNT); 
        String category = "Category :" +c.getString(TAG_CATEGORY); 


        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(TAG_PID, pid); 
        map.put(TAG_TITLE, title); 
        map.put(TAG_AUTHOR, author); 
        map.put(TAG_DESCRIPTION, description); 
        map.put(TAG_PRICE, price); 
        map.put(TAG_DISCOUNT, discount); 
        map.put(TAG_CATEGORY, category); 
        // adding HashList to ArrayList 
        eventsList.add(map); 
       } 
      } 


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

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after getting all products 
     pDialog.dismiss(); 
     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 
       ListAdapter adapter = new SimpleAdapter(
         Latest.this, eventsList, 
         R.layout.list_item2, new String[] { TAG_PID, TAG_TITLE, TAG_AUTHOR, TAG_DESCRIPTION, TAG_PRICE, TAG_DISCOUNT, TAG_DESCRIPTION}, 
         new int[] { R.id.pid, R.id.title, R.id.author,R.id.description, R.id.price, R.id.discount,R.id.category }); 
       // updating listview 
       setListAdapter(adapter); 
      } 
     }); 

    } 

} 
} 

이는 로그 캣 (오류)입니다 :

Buffer Error(1024): Error converting result java.lang.NullPointerException: lock == null 
JSON Parser(1024): Error parsing data org.json.JSONException: End of input at character 0 of 
AndroidRuntime(1024): FATAL EXCEPTION: AsyncTask #1 
AndroidRuntime(1024): java.lang.RuntimeException: An error occured while executing doInBackground() 
AndroidRuntime(1024): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
AndroidRuntime(1024): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
AndroidRuntime(1024): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
AndroidRuntime(1024): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
AndroidRuntime(1024): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
AndroidRuntime(1024): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
AndroidRuntime(1024): at java.lang.Thread.run(Thread.java:856) 
AndroidRuntime(1024): Caused by: java.lang.NullPointerException 
AndroidRuntime(1024): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:113) 
AndroidRuntime(1024): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:1) 
AndroidRuntime(1024): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
AndroidRuntime(1024): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
AndroidRuntime(1024): ... 3 more 

이는 JSONParser 클래스입니다 :

public class JSONParser { 
    private static final String TAG = "JSONParser"; 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

// constructor 
public JSONParser() { 

} 

// function get json from url 
// by making HTTP POST or GET method 
public JSONObject makeHttpRequest(String url, String method, 
     List<NameValuePair> params) { 

    // Making HTTP request 
    try{ 
     // check for request method 
     if(method == "POST"){ 
      Log.d(TAG, "method=POST"); 
      // request method is POST 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      Log.d(TAG, "url=" + url); 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new UrlEncodedFormEntity(params)); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 

     }else if(method == "GET"){ 
      Log.d(TAG, "method=GET"); 
      // request method is GET 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      String paramString = URLEncodedUtils.format(params, "utf-8"); 
      url += "?" + paramString; 
      Log.d(TAG, "url=" + url); 
      HttpGet httpGet = new HttpGet(url); 

      HttpResponse httpResponse = httpClient.execute(httpGet); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 
     }   

     Log.d(TAG, "HTTP request done"); 
    } catch (UnsupportedEncodingException e) { 
     Log.d(TAG, "UNSUPPORTED ENCODING: ", e); 
    } catch (ClientProtocolException e) { 
     Log.d(TAG, "CLIENT PROTOCOL: ", e); 
    } catch (IOException e) { 
     Log.d(TAG, "IO EXCEPTION: ", e); 
    } 

    try { 
     Log.d(TAG, "Extract response"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      Log.d(TAG, "line=" + line); 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
     Log.d(TAG, "json=" + json); 
    } catch (Exception e) { 
     Log.d(TAG, "Exception: ", e); 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try { 
     Log.d(TAG, "Parse JSON"); 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.d(TAG, "JSONException: ", e); 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jObj; 

} 
} 

이는 최근의 logcat :

03-19 12:44:55.985: D/dalvikvm(919): GC_CONCURRENT freed 338K, 15% free 2791K/3268K, paused 111ms+119ms, total 437ms 
03-19 12:45:10.246: D/dalvikvm(919): GC_CONCURRENT freed 373K, 16% free 2815K/3324K, paused 110ms+100ms, total 551ms 
03-19 12:45:11.366: D/JSONParser(919): IO EXCEPTION: 
03-19 12:45:11.366: D/JSONParser(919): org.apache.http.conn.HttpHostConnectException: Connection to http:// refused 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
03-19 12:45:11.366: D/JSONParser(919): at com.spyraa.bookstore.JSONParser.makeHttpRequest(JSONParser.java:66) 
03-19 12:45:11.366: D/JSONParser(919): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:105) 
03-19 12:45:11.366: D/JSONParser(919): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:1) 
03-19 12:45:11.366: D/JSONParser(919): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-19 12:45:11.366: D/JSONParser(919): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-19 12:45:11.366: D/JSONParser(919): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-19 12:45:11.366: D/JSONParser(919): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-19 12:45:11.366: D/JSONParser(919): at java.lang.Thread.run(Thread.java:856) 
03-19 12:45:11.366: D/JSONParser(919): Caused by: java.net.ConnectException: failed to connect to http/1 (port 80): connect failed: ECONNREFUSED (Connection refused) 
03-19 12:45:11.366: D/JSONParser(919): at libcore.io.IoBridge.connect(IoBridge.java:114) 
03-19 12:45:11.366: D/JSONParser(919): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
03-19 12:45:11.366: D/JSONParser(919): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
03-19 12:45:11.366: D/JSONParser(919): at java.net.Socket.connect(Socket.java:842) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
03-19 12:45:11.366: D/JSONParser(919): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
03-19 12:45:11.366: D/JSONParser(919): ... 14 more 
03-19 12:45:11.366: D/JSONParser(919): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused) 
03-19 12:45:11.366: D/JSONParser(919): at libcore.io.Posix.connect(Native Method) 
03-19 12:45:11.366: D/JSONParser(919): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 
03-19 12:45:11.366: D/JSONParser(919): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
03-19 12:45:11.366: D/JSONParser(919): at libcore.io.IoBridge.connect(IoBridge.java:112) 
03-19 12:45:11.366: D/JSONParser(919): ... 19 more 
03-19 12:45:11.499: D/JSONParser(919): Extract response 
03-19 12:45:12.838: D/JSONParser(919): Exception: 
03-19 12:45:12.838: D/JSONParser(919): java.lang.NullPointerException: lock == null 
03-19 12:45:12.838: D/JSONParser(919): at java.io.Reader.<init>(Reader.java:64) 
03-19 12:45:12.838: D/JSONParser(919): at java.io.InputStreamReader.<init>(InputStreamReader.java:79) 
03-19 12:45:12.838: D/JSONParser(919): at com.spyraa.bookstore.JSONParser.makeHttpRequest(JSONParser.java:83) 
03-19 12:45:12.838: D/JSONParser(919): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:105) 
03-19 12:45:12.838: D/JSONParser(919): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:1) 
03-19 12:45:12.838: D/JSONParser(919): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-19 12:45:12.838: D/JSONParser(919): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-19 12:45:12.838: D/JSONParser(919): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-19 12:45:12.838: D/JSONParser(919): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-19 12:45:12.838: D/JSONParser(919): at java.lang.Thread.run(Thread.java:856) 
03-19 12:45:12.985: D/JSONParser(919): Parse JSON 
03-19 12:45:31.570: D/JSONParser(919): JSONException: 
03-19 12:45:31.570: D/JSONParser(919): org.json.JSONException: End of input at character 0 of 
03-19 12:45:31.570: D/JSONParser(919): at org.json.JSONTokener.syntaxError(JSONTokener.java:450) 
03-19 12:45:31.570: D/JSONParser(919): at org.json.JSONTokener.nextValue(JSONTokener.java:97) 
03-19 12:45:31.570: D/JSONParser(919): at org.json.JSONObject.<init>(JSONObject.java:154) 
03-19 12:45:31.570: D/JSONParser(919): at org.json.JSONObject.<init>(JSONObject.java:171) 
03-19 12:45:31.570: D/JSONParser(919): at com.spyraa.bookstore.JSONParser.makeHttpRequest(JSONParser.java:101) 
03-19 12:45:31.570: D/JSONParser(919): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:105) 
03-19 12:45:31.570: D/JSONParser(919): at com.spyraa.bookstore.Latest$LoadAllProducts.doInBackground(Latest.java:1) 
03-19 12:45:31.570: D/JSONParser(919): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-19 12:45:31.570: D/JSONParser(919): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-19 12:45:31.570: D/JSONParser(919): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-19 12:45:31.570: D/JSONParser(919): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-19 12:45:31.570: D/JSONParser(919): at java.lang.Thread.run(Thread.java:856) 
03-19 12:45:32.365: D/dalvikvm(919): GC_CONCURRENT freed 412K, 17% free 2798K/3352K, paused 55ms+31ms, total 671ms 

위의 게다가, 로그 캣의 대부분은 이러한 구성 모두 :

03-19 12:45:44.466: I/Choreographer(919): Skipped 289 frames! The application may be doing too much work on its main thread. 
03-19 12:45:44.706: W/Trace(919): Unexpected value from nativeGetEnabledTags: 0 
+2

로 교체합니다. 이 함수 안에 – Egor

+0

이 있습니다. [String doInBackground (String ... args)] –

답변

1

줄 번호를 제공하지 않아서 추측 할 수 있습니다.

오류 분석 데이터 org.json.JSONException : 잘못된 JSON 문자열에서

힌트의 문자 0 입력의 끝. 디버깅을 위해 수신 된 JSON 문자열을 logcat에 인쇄해야합니다.

업데이트 :

(내가 지금까지 본 것을) JSONParser의 문제는,이 예외를 잡는다 것을 주로 어떤 메시지를 덤프하고 을 계속합니다. 그 결과는 대개 몇 가지 메시지가 있고 처음에 어디에서 실패했는지 모를 수 있습니다.

이 이유 때문에 추적 문을 makeHttpRequest()에 추가하여 실패한 부분을 확인해야합니다. 또 다른 (추가) 접근법은 모든 try/catch 문을 제거하고 예외가 외부로 전파되도록하는 것입니다. 그런 다음 첫 번째 오류가 발생한 스택 추적을 통해 문제의 실제 원인을 확인할 수 있습니다.

그런데도 적절한 추적 및 디버깅 로그가 필수적입니다.

+0

이 무슨 뜻입니까? Log.d ("모든 제품 :", json.toString()); –

+0

@ A.K.C.F.L 네, http 요청이 전달하는 것을 볼 수 있습니다. 그것은 "문자 0"때문에 아무 것도 표시되지 않을 수도 있습니다. 어떤 JSONParser를 사용하고 있습니까? –

+0

나는 이미 그 코드를 가지고 있지만 도움이되지 않습니다. 하나의 JSONParser를 사용하고 있는지 확실하지 않습니다. 나는 그것에 대한 지식이별로 없으며 JSONParser는이 페이지와 거의 같습니다 - (http://www.androidhive.info/2012/01/android-json-parsing-tutorial/) –

0

의 잘못된 취급 JSON 데이터 같은 소리. JSON 구조가 확실합니까? 그 샘플이 도움이 될 수 있습니다.

+0

구조체가 확실하지 않지만 흐름의 논리를 따랐습니다. Google에서 몇 가지 샘플을 보았지만 아무 것도 보이지 않았습니다. –

0

원시 데이터 형식 대신 개체를 사용하십시오. 기본 유형 (int, fload, double 등)은 널 값을 저장할 수 없습니다.

int

는 예외가 발생 라인을 표시하시기 바랍니다 Integer

Integer success = json.getInt(TAG_SUCCESS); 
+0

태그가 windowsManager 및 strictMode 인 목록에서 더 많은 오류를 제외하고 변경 사항이 없습니다. –