2015-01-20 95 views
-3

我有FATAL異常:在我的代碼中主要java.lang.nullPointerException但我不知道爲什麼,因爲我的代碼似乎很好。發生致命異常:main java.lang.nullPointerException

MainActivity.java文件

package com.bitbytestudios.iquiz; 

import java.util.ArrayList; 

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

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ListView; 

public class MainActivity extends Activity implements OnTaskCompleted { 

public static String TAG_QUIZNAME = "quizname"; 
public static String TAG_FILENAME = "filename"; 

private ListView listview; 
private ListViewAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview_main); 

    listview = (ListView) findViewById(R.id.listview); 

    setTitle("Select Quiz"); 

    new DownloadJSON(MainActivity.this, new MainActivity()) 
      .execute("iquiz_quizzes.json"); 
} 

@Override 
public void onTaskCompleted(JSONObject result) { 
    ArrayList<Quizzes> quizzesArray = new ArrayList<Quizzes>(); 

    try { 
     // Locate the array name in JSON 
     JSONArray jsonarray = result.getJSONArray("quizzes"); 

     //Log.e("momersaleem", String.valueOf(jsonarray.length())); 

     for (int i = 0; i < jsonarray.length(); i++) { 

      JSONObject quizObject = jsonarray.getJSONObject(i); 

      String quizName = quizObject.getString(TAG_QUIZNAME); 
      String fileName = quizObject.getString(TAG_FILENAME); 

      quizzesArray.add(new Quizzes(quizName, fileName)); 
     } 
    } catch (JSONException e) { 
     Log.e("Error", e.getMessage()); 
     e.printStackTrace(); 
    } 

    adapter = new ListViewAdapter(MainActivity.this, quizzesArray); 
    listview.setAdapter(adapter); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
} 
} 

ListViewAdapter.java文件

package com.bitbytestudios.iquiz; 

import java.util.ArrayList; 

import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class ListViewAdapter extends BaseAdapter { 

    Context context; 
    ArrayList<Quizzes> quizzes; 

    public ListViewAdapter(Context context, ArrayList<Quizzes> quizzes) { 
     this.context = context; 
     this.quizzes = quizzes; 
    } 

    @Override 
    public int getCount() { 
     return quizzes.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 

     TextView quizName; 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View itemView = inflater.inflate(R.layout.listview_item, parent, false); 

     // Get the position 
     String quiz = quizzes.get(position).quizName; 

     // Locate the TextViews in listview_item.xml 
     quizName = (TextView) itemView.findViewById(R.id.quizName); 
     quizName.setText(quiz); 

     // Capture ListView item click 
     itemView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // Get the position 
       MainActivity.TAG_FILENAME = quizzes.get(position).fileName; 

       Log.e("momersaleem", MainActivity.TAG_FILENAME); 
       //Intent intent = new Intent(context, Quiz.class); 

       // Start SingleItemView Class 
       //context.startActivity(intent); 

      } 
     }); 
     return itemView; 
    } 
} 

DownloadJSON.java文件

package com.bitbytestudios.iquiz; 

import org.json.JSONObject; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 

public class DownloadJSON extends AsyncTask<String, String, JSONObject> { 

    private Context context; 
    private OnTaskCompleted listener; 
    ProgressDialog pDialog; 

    // constructor 
    DownloadJSON(Context context, OnTaskCompleted listener) { 
     this.context = context; 
     this.listener = listener; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     // show progress dialog box 
     pDialog = new ProgressDialog(context); 
     // pDialog.setTitle("Loading Channels..."); 
     pDialog.setMessage("Loading Quizzes, Please wait..."); 
     // pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 
     JSONObject jsonobject = JSONLoader.getJSON(params[0]); 
     return jsonobject; 
    } 

    // called after doInBackground finishes 
    @Override 
    protected void onPostExecute(JSONObject result) { 
     super.onPostExecute(result); 
     pDialog.dismiss(); 
     listener.onTaskCompleted(result); 
    } 

} 

logcat的視圖在MainActivity.java文件的以下行

01-21 01:06:55.943: I/System.out(1258): [CDS]close[35047] 
01-21 01:06:55.943: I/System.out(1258): close [socket][/0.0.0.0:35047] 
01-21 01:06:55.944: I/System.out(1258): close [socket][/0.0.0.0:35047] 
01-21 01:06:55.949: D/AndroidRuntime(1258): Shutting down VM 
01-21 01:06:55.949: W/dalvikvm(1258): threadid=1: thread exiting with uncaught exception (group=0x40ea7258) 
01-21 01:06:55.950: E/AndroidRuntime(1258): FATAL EXCEPTION: main 
01-21 01:06:55.950: E/AndroidRuntime(1258): java.lang.NullPointerException 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at com.bitbytestudios.iquiz.MainActivity.onTaskCompleted(MainActivity.java:60) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at com.bitbytestudios.iquiz.DownloadJSON.onPostExecute(DownloadJSON.java:45) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at com.bitbytestudios.iquiz.DownloadJSON.onPostExecute(DownloadJSON.java:1) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at android.os.Looper.loop(Looper.java:137) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at android.app.ActivityThread.main(ActivityThread.java:4508) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576) 
01-21 01:06:55.950: E/AndroidRuntime(1258):  at dalvik.system.NativeStart.main(Native Method) 

listview_main.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</RelativeLayout> 

我有錯誤。

adapter = new ListViewAdapter(MainActivity.this, quizzesArray); 
listview.setAdapter(adapter); 

請幫我擺脫這個錯誤。

感謝,

momersaleem

+0

是的,我在listview_main.xml文件中。讓我把這個文件也放在上面。 – momersaleem 2015-01-20 20:15:23

回答

1

,因爲你傳遞一個假MainActivity到下載這是最有可能的:

new DownloadJSON(MainActivity.this, new MainActivity()) 
     .execute("iquiz_quizzes.json"); 

你的第二個參數更改爲thisActivity不能撥打new

+0

糟糕。解決。 :)。對不起,這個虛僞。 – momersaleem 2015-01-20 20:28:18

相關問題