2013-03-18 3 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); 
      } 
     }); 

    } 

} 
} 

и это LogCat (ошибка):

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 

кроме выше, большая часть LogCat состоит их обоих:

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

внутри этой функции: [protected String doInBackground (String ... args)] –

ответ

1

Поскольку вы не указали номера строк, я могу только догадываться.

Ошибка org.json.JSONException синтаксического анализа данных: Конец ввода в символ 0 из

намеков на недопустимый строку JSON. Вы должны распечатать полученную строку JSON для logcat для отладки.

Update:

Проблема с JSONParser (то, что я видел до сих пор), прежде всего, что он ловит исключения, отвалов какое-то сообщение, а затем продолжает. Следствием этого является то, что у вас обычно есть несколько сообщений и не знаю, на каком именно месте он был изначально.

Вот почему вы должны добавить инструкции следа в makeHttpRequest(), чтобы увидеть, где он не работает. Другой (дополнительный) подход состоял бы в том, чтобы удалить все утверждения try/catch и позволить исключению распространяться вне. Тогда у вас будет трассировка стека, где первый сбой, и вы можете увидеть, какова реальная причина вашей проблемы.

Но даже при этом необходимы правильные журналы отслеживания и отладки.

+0

это то, что вы имели в виду? Log.d («Все товары:», json.нанизывать()); –

+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. –