2013-10-16 148 views
0

我最近增加了一個閃屏到我的Android應用程序,以掩蓋一個JSON文件的加載,但整理後分析我的應用程序崩潰。我已經註釋掉,並註釋掉了代碼,直到我發現有問題的片段,但我不知道爲什麼它不工作。如果我註釋掉從該代碼段循環無法啓動活動ComponentInfo;試圖創建啓動畫面

代碼工作。

從MagazinePagesActivity.java:

public void loadItems() { 
    for (Item item : SplashActivity.downloadedItems) { 
     Post post = (Post) item; 
     for (String tag : post.tags) { 
      if (tag.equals(this.tag)) { 
       // loader.loadImage(magazine.imageURL, new 
       // SimpleImageLoadingListener()); 
       Bundle bundle = new Bundle(); 
       bundle.putString("title", post.title); 
       bundle.putString("article", post.article); 
       bundle.putString("imageURL", post.imageURL); 
       MagazineFragment cover = new MagazineFragment(); 
       cover.setArguments(bundle); 
       coverAdapter.addNewItem(cover); 
      } 
     } 
    } 
    setContentView(vp); 
} 

起初,我以爲是因爲SplashActivity.downloadedItems沒有正確定義,但它看起來好像沒什麼問題:

從SplashActivity.java:

public static ArrayList<Item> downloadedItems = new ArrayList<Item>(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 

    new RetreiveJSONTask() { 


     protected void onPostExecute(String JSON) 
     { 
      Log.d("SplashActivity", "Beginning parsingJSON"); 
      downloadedItems = parseJSON (JSON); 
      Log.d("SplashActivity", "Finished parsingJSON"); 
      Log.d("SplashActivity", "" + SplashActivity.downloadedItems.isEmpty()); 
      Intent i = new Intent(SplashActivity.this, MagazinePagesActivity.class); 
      startActivity(i); 

      // Closes the splash screen 
      finish(); 
     } 
    }.execute(sourceURL()); 
} 

從logcat的:

10-16 19:23:12.602: D/AndroidRuntime(828): Shutting down VM 
10-16 19:23:12.602: W/dalvikvm(828): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
10-16 19:23:12.632: E/AndroidRuntime(828): FATAL EXCEPTION: main 
10-16 19:23:12.632: E/AndroidRuntime(828): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bruinfootball/com.dailybruin.bruinframework.channels.StoryListActivity}: java.lang.NullPointerException 
10-16 19:23:12.632: E/AndroidRuntime(828): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.os.Looper.loop(Looper.java:137) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-16 19:23:12.632: E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method) 
10-16 19:23:12.632: E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:525) 
10-16 19:23:12.632: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-16 19:23:12.632: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-16 19:23:12.632: E/AndroidRuntime(828): at dalvik.system.NativeStart.main(Native Method) 
10-16 19:23:12.632: E/AndroidRuntime(828): Caused by: java.lang.NullPointerException 
10-16 19:23:12.632: E/AndroidRuntime(828): at com.dailybruin.bruinframework.channels.StoryListActivity.loadItems(StoryListActivity.java:27) 
10-16 19:23:12.632: E/AndroidRuntime(828): at com.dailybruin.bruinframework.channels.JSONItemsActivity.onCreate(JSONItemsActivity.java:20) 
10-16 19:23:12.632: E/AndroidRuntime(828): at com.dailybruin.bruinframework.channels.StoryItemsActivity.onCreate(StoryItemsActivity.java:18) 
10-16 19:23:12.632: E/AndroidRuntime(828): at com.dailybruin.bruinframework.channels.StoryListActivity.onCreate(StoryListActivity.java:18) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.Activity.performCreate(Activity.java:5133) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-16 19:23:12.632: E/AndroidRuntime(828): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
10-16 19:23:12.632: E/AndroidRuntime(828): ... 11 more 

不知道是否有幫助,但SplashActivity和MagazinePagesActivity都擴展JSONItemsActivity,分別。

在此先感謝您的幫助!我對Android非常陌生,請耐心等待。

編輯:這是奇怪,調試語句,我把檢查ArrayList中爲空返回true,但內parseJSON另一個調試聲明顯示,被添加的東西。我的parseJSON方法:

public ArrayList<Item> parseJSON(String jsonString) { 
    ArrayList<Item> magazines = new ArrayList<Item>(); 
    JSONArray jArray; 
    try { 
     jArray = new JSONArray(jsonString); 

     JSONObject jObject; 
     JSONObject image; 
     String img; 
     String title; 
     String subtitle; 
     int commentCount; 
     String content; 
     String date; 
     String ID; 
     String slug; 
     JSONArray array; 
     String[] tags; 
     for (int i = 0; i < jArray.length(); i++) { 
      jObject = jArray.getJSONObject(i); 
      img = jObject.getString("tall_image_url"); 
      if (img.equals("")) 
       img = jObject.getString("image_url"); 
      if (img.equals("") && !jObject.isNull("poster_image")) { 
       image = jObject.getJSONObject("poster_image"); 
       img = image.getString("name"); 
      } 
      title = jObject.getString("title"); 
      subtitle = jObject.getString("subtitle"); 
      commentCount = jObject.getInt("comment_count"); 
      content = jObject.getString("content_html"); 
      date = jObject.getString("creation_date"); 
      ID = jObject.getString("id"); 
      slug = jObject.getString("slug"); 
      array = jObject.getJSONArray("tags_list"); 
      tags = new String[array.length()]; 
      for (int j = 0; j < array.length(); j++) { 
       tags[j] = array.getString(j); 
      } 

      for (String tag : tags) { 
       if (tag.equals(this.tag)) 
       { 
        Post additive = new Post(img, title, subtitle, 
          commentCount, content, date, ID, slug, tags); 
        magazines.add(additive); 
        Log.d("SplashActivity", additive.toString()); 
       } 
      } 

     } 

    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return magazines; 
} 

StoryListActivity線27:

public void loadItems() { 
    (findViewById(R.id.progress_bar)).setVisibility(View.GONE); 
    getSupportFragmentManager().beginTransaction() 
    .replace(R.id.loading, new StoryListFragment()).commit(); 
} 

StoryItemsActivity(MagazinePagesActivity和StoryListActivity擴展此類;這類擴展JSONItemsActivity,這SplashActivity也延伸):

package com.dailybruin.bruinframework.channels; 

import java.util.ArrayList; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import com.dailybruin.bruinframework.R; 
import com.dailybruin.bruinframework.base.BaseActivity; 
import com.dailybruin.bruinframework.base.URLBuilder; 
import android.os.Bundle; 

public abstract class StoryItemsActivity extends JSONItemsActivity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

public String sourceURL() 
{ 
    return URLBuilder.getPostsURL(getString(R.string.slug)); 
} 

public ArrayList<Item> parseJSON(String jsonString) { 
    // Using pre-downloaded and parsed JSON 
    return SplashActivity.downloadedItems; 
} 
} 

回答

0

檢查這部分代碼。第27行。這是空的,因此導致NPE。

Caused by: java.lang.NullPointerException 10-16 19:23:12.632: E/AndroidRuntime(828): at com.dailybruin.bruinframework.channels.StoryListActivity.loadItems(StoryListActivity.java:27)

+0

感謝您的迴應!當我評論它時,仍然有錯誤;如果你想看看它,我會將它更新到主文章中。 StoryListActivity擴展了MagazinePagesActivity也擴展的StoryItemsActivity;也許它可能是那個班級?我還用該類的代碼更新了主帖。 – user2884505

相關問題