2014-11-06 29 views
-2

我有一個listview與特定的id @android:id/list空指針JSON數據

JSON數據剛剛在它的對象陣列。

public class MainActivity extends ListActivity { 

String KEY_DESCRIPT = "DESCRIPTION:"; 

String KEY_NAME = "NAME:"; 
String line = null; 
JSONArray datalist=null; 
JSONObject getobj=null; 
BufferedReader br; 
StringBuilder sb; 
String Web=null; 
JSONArray jresult=null; 
URL url; 
HttpURLConnection cn; 
String TAG="MYACTIVITY"; 
String name = null; 
String [] sortedlist; 
ProgressBar loading; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    loading= (ProgressBar) findViewById(R.id.progressBar1); 
    Web = "http://api.mtgdb.info/search/Dragon"; 
    new jsonGet().execute(Web); 
} 

protected class jsonGet extends AsyncTask<String , Void, JSONArray>{ 

    @Override 
    protected JSONArray doInBackground(String... params) { 
     try { 
      url= new URL(params[0]); 
      cn=(HttpURLConnection) url.openConnection(); 
      br= new BufferedReader(new InputStreamReader(cn.getInputStream())); 
      sb= new StringBuilder(); 
      while((line = br.readLine())!=null){ 
       sb.append(line+"\n"); 
      } 
      br.close(); 



      datalist= new JSONArray(sb.toString()); 


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

      e.printStackTrace(); 
     } 

     return datalist; 

    } 

    @Override 
    protected void onPostExecute(JSONArray result) { 
     super.onPostExecute(result); 
     jresult=result; 
     passList(); 

     } 

    } 



public void passList() { 
    loading.setVisibility(View.INVISIBLE); 
    if (jresult==null){ 
     Log.e(TAG, "ERROR"); 

    }else{ 
     ArrayList<HashMap<String, String>> newlist =new ArrayList<HashMap<String,String>>(); 

    for (int i =0;i<jresult.length();i++){ 
     try{ 
     getobj= jresult.getJSONObject(i); 
     name=getobj.getString("name"); 
     String description =getobj.getString("description"); 
     HashMap<String, String> secondlist= new HashMap<String, String>(); 
     secondlist.put(KEY_NAME, name); 
     secondlist.put(KEY_DESCRIPT, description); 
     newlist.add(secondlist); 
     }catch (Exception e){ 
      Log.i(TAG, "THis error"); 
     } 

    } 

    Arrays.sort(sortedlist); 

    String [] keys ={KEY_NAME,KEY_DESCRIPT}; 
    int [] ids ={android.R.id.text1,android.R.id.text2}; 
    SimpleAdapter adapter = 
      new SimpleAdapter(this, 
        newlist, android.R.layout.simple_list_item_2, keys, ids); 
    setListAdapter(adapter); 
    } 
} 

堆棧跟蹤:

1-06 22:49:10.019: D/AndroidRuntime(1476): Shutting down VM 
11-06 22:49:10.023: W/dalvikvm(1476): threadid=1: thread exiting with uncaught exception (group=0xa4d50b20) 
11-06 22:49:10.023: E/AndroidRuntime(1476): FATAL EXCEPTION: main 
11-06 22:49:10.023: E/AndroidRuntime(1476): Process: com.example.mtg, PID: 1476 
11-06 22:49:10.023: E/AndroidRuntime(1476): java.lang.NullPointerException 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at java.util.ComparableTimSort.sort(ComparableTimSort.java:142) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at java.util.Arrays.sort(Arrays.java:1970) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at com.example.mtg.MainActivity.passList(MainActivity.java:122) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at com.example.mtg.MainActivity$jsonGet.onPostExecute(MainActivity.java:91) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at com.example.mtg.MainActivity$jsonGet.onPostExecute(MainActivity.java:1) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at android.os.AsyncTask.finish(AsyncTask.java:632) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at android.os.Handler.dispatchMessage(Handler.java:102) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at android.os.Looper.loop(Looper.java:136) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at android.app.ActivityThread.main(ActivityThread.java:5001) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at java.lang.reflect.Method.invoke(Method.java:515) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
11-06 22:49:10.023: E/AndroidRuntime(1476):  at dalvik.system.NativeStart.main(Native Method) 
+0

請閱讀關於格式化問題的幫助頁面:http://stackoverflow.com/help/formatting – Tom 2014-11-06 23:09:15

回答

1

你的異常發生在這裏:

Arrays.sort(sortedlist); 

的問題是,你正在聲明該變量作爲String [] sortedlist;,但你永遠不初始化變量,但陣列(即sortedlist = new String[x];)。這意味着sortedlist仍然是null(這是新對象類型的標準值),並且這會導致NullPointerException

檢查爲什麼你永遠不會這樣做,並更新/修復你的代碼。

請注意,禁止將null元素寫入該數組中。這意味着,如果您致電Arrays.sort(sortedlist),則陣列String[] sortedlist = {"a", null, "b"};也會導致NullPointerException

+0

謝謝,我應該只是把= new string [];該領域沒有任何東西? – Andrew 2014-11-07 00:19:28

+0

@Andrew你爲什麼要這樣做?排序空數組的目的是什麼?想想你想要在那裏排序,然後確保這個數據在這個數組中。 – Tom 2014-11-07 00:27:33

+0

那麼它一直在工作,直到我決定嘗試hashmap;我不明白。它確實排序和JSON名稱是爲了讓我感到困惑 – Andrew 2014-11-07 00:33:52