【发布时间】:2015-01-01 17:04:24
【问题描述】:
我不明白出了什么问题,在我的设备应用程序运行良好,但有时在日志中(应用程序用户、会话、崩溃......通过某些服务跟踪)我看到应用程序崩溃(NullPointerException),Toast 不能因为活动变量为空而被运行。
第 45 行(populateCats() 方法抛出异常 NullPointerException)
package package.name;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.util.ArrayList;
public class CatsList extends ListFragment implements OnTaskCompleted {
Document doc;
MainActivity activity;
ArrayList<Cat> cats;
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cat cat = cats.get(position);
//SOME CODE
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new GetData(activity, this, false).execute(Jsoup.connect(MainActivity.url));
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = (MainActivity) activity;
}
public void populateCats(){
if(doc == null)
{
Toast.makeText(activity, "Error....", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(activity, "Success....", Toast.LENGTH_SHORT).show();
//SOME CODE
}
}
日志:
java.lang.NullPointerException
at android.widget.Toast.<init>(Toast.java:98)
at android.widget.Toast.makeText(Toast.java:254)
at PACKAGE_NAME.CatsList.populateCats(CatsList.java:64)
at PACKAGE_NAME.CatsList.taskCompleted(CatsList.java:92)
at PACKAGE_NAME.GetData.onPostExecute(GetData.java:61)
at PACKAGE_NAME.GetData.onPostExecute(GetData.java:12)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)
AndroidManifect.xml 还包含 - android:configChanges="keyboardHidden|orientation|screenSize"
【问题讨论】:
-
尝试将 toasts 中的活动变量更改为 getActivity()。您的活动变量设置不正确......是否可以使用您从 onAttach(活动活动)获得的活动参考?像这样:this.activity = 上述方法的活动?
-
为什么? onAttach 方法在 populateCats() 之前调用,我将保存对活动的引用.. p.s.我也试过这个方法
-
试试:this.activity = getActivity() in onActivityCreated(Bundle)。见developer.android.com/reference/android/app/…
-
@ramaral 我能知道为什么吗? ))
-
@ramaral 我无法尝试,因为在我的手机应用程序上运行良好(我在跟踪我的应用程序的服务日志中发现异常)我希望你能理解我的英语)