2013-10-10 85 views
0

當無線網絡是 - 所有的作品,但是當它關​​閉 - 我得到空指針異常空指針異常ListView中

package ua.khuta.myskidka; 

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

import android.database.Cursor; 
import android.graphics.Color; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 

import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 

public class FragmentNews extends Fragment { 
private View v; 
ListView lvNews; 
Database db; 
mySCadapter scAdapter; 
public String DEBUG_TAG = "myLogs"; 
String[] from = new String[] { Database.NEWS_TITLE, Database.NEWS_IMAGE_URL, 
     Database.NEWS_SHORT_DESCRIPTION }; 
int [] to = new int[] { R.id.item_news_tv_title, R.id.item_news_iv_image, 
     R.id.item_news_tv_short_description }; 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    v = inflater.inflate(R.layout.fragment_news, null); 
    lvNews = (ListView) v.findViewById(R.id.lv_new); 
    lvNews.setCacheColorHint(Color.TRANSPARENT); 

    return v; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    db = Database.getInstance(getActivity()); 

    ConnectivityManager connManager = (ConnectivityManager) getActivity() 
      .getSystemService(getActivity().CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    if (mWifi.isConnected()) { 
     Log.d(DEBUG_TAG, "wi-fi is on"); 
     db.cleanDB(); 
     GetJSON getJSON = new GetJSON(); 
     getJSON.execute(); 
    } else { 

     Log.d(DEBUG_TAG, "wi-fi is off"); 

     Cursor c = db.getNewsFromDb(); 
     Log.d(DEBUG_TAG, String.valueOf(c.getCount())); 
     mySCadapter scAdapter = new mySCadapter(getActivity(), R.layout.item_news, c, 
       from, to); 

     lvNews.setAdapter(scAdapter); 
    } 

} 



class GetJSON extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     // Creating JSON Parser instance 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 

     Cursor c = db.getNewsFromDb(); 
     scAdapter = new mySCadapter(getActivity(), R.layout.item_news, c, 
       from, to); 

     lvNews.setAdapter(scAdapter); 

     super.onPostExecute(result); 
    } 

} 

} 

錯誤日誌

10-10 09:12:53.275: E/AndroidRuntime(28582): FATAL EXCEPTION: main 
10-10 09:12:53.275: E/AndroidRuntime(28582): java.lang.RuntimeException: Unable to start activity ComponentInfo{ua.khuta.myskidka/ua.khuta.myskidka.MainActivity}: java.lang.NullPointerException 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.os.Looper.loop(Looper.java:137) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.ActivityThread.main(ActivityThread.java:5103) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at java.lang.reflect.Method.invokeNative(Native Method) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at java.lang.reflect.Method.invoke(Method.java:525) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at dalvik.system.NativeStart.main(Native Method) 
10-10 09:12:53.275: E/AndroidRuntime(28582): Caused by: java.lang.NullPointerException 
10-10 09:12:53.275: E/AndroidRuntime(28582): at ua.khuta.myskidka.FragmentNews.onCreate(FragmentNews.java:82) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.support.v4.app.Fragment.performCreate(Fragment.java:1455) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:893) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:556) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.Activity.performStart(Activity.java:5143) 
10-10 09:12:53.275: E/AndroidRuntime(28582): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
10-10 09:12:53.275: E/AndroidRuntime(28582): ... 11 more 
+0

waht是82行'FragmentNews.java'? – Raghunandan

+0

lvNews.setAdapter(scAdapter); –

+0

在這部分:else { Log.d(DEBUG_TAG,「wi-fi is off」); 光標c = db.getNewsFromDb();Log.d(DEBUG_TAG,String.valueOf(c.getCount())); mySCadapter scAdapter = new mySCadapter(getActivity(),R.layout.item_news,c, from,to); lvNews。setAdapter(scAdapter); } –

回答

5

的問題是,你創建的ListView在onCreateView()中,並將其adapter設置爲onCreate() ..

您應該知道onCreate()始終在之前被調用,那時候你的listview沒有被創建..那就是你爲什麼得到NullPointerException

將您在onCreateView()

+1

它的工作原理,感謝所有 –

0

你的問題的onCreate()代碼創建了ListViewonCreateView()方法,並且已經在onCreate()設置適配器。所以onCreate()必須在onCreateView()之前調用,這就是爲什麼ListViews未初始化,並且您已經找到空指針異常。

0

的問題是,你在另一個佈局文件創建的ListView,而你是調用同一活動的任何其他佈局文件。所以它的不匹配佈局調用activity.So地方的ListView在相同的佈局,你的活動使用或者如果你想在另一個佈局的ListView然後更改ArrayAdapter對象背景如: 改變它

ArrayAdapter適配器=新ArrayAdapter(this, R.layout。,R.id.,);

與此:

ArrayAdapter適配器=新ArrayAdapter(, R.layout,R.id.,);

0

只要把onViewCreated回調您的列表視圖代碼

試試這個代碼:

Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState) { 
    return inflater.inflate(R.layout.fragment_news, container, false);  
} 

@Override 
public void onViewCreated (View view, Bundle savedInstanceState) { 
    listview = (ListView) view.findViewById(R.id.listview1); 
    try 
    { 
     // put your codes here 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
0

使用onActivityCreated(捆綁savedInstanceState)overrided方法,並嘗試把你的代碼在。它有助於解決這個崩潰問題。因爲在它存在之前創建視圖會產生這個異常並導致應用程序崩潰。無論何時從這個視圖移動,使用onPause()和onResume()都會減少崩潰。