Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 碎片';在活动';s onCreate_Android_Android Fragments_Android Activity - Fatal编程技术网

Android 碎片';在活动';s onCreate

Android 碎片';在活动';s onCreate,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,我有我的VehicleListActivity,它将一个包传递给我的片段。 这是活动的onCreate方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vehicle_list); vehicles = new ArrayList<>();

我有我的
VehicleListActivity
,它将一个
传递给我的片段。 这是活动的
onCreate
方法:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_vehicle_list);
    vehicles = new ArrayList<>();

    Intent intent = getIntent();
    String userID = intent.getStringExtra("userID");
    LoadingVehicleListFragment f = new LoadingVehicleListFragment();
    Bundle fArguments = new Bundle();
    fArguments.putString("userID", userID);
    f.setArguments(fArguments);
    getSupportFragmentManager().beginTransaction().add(R.id.loadingVehicleFragment, f).commit();
}
我注意到片段的
onCreateView
在活动的
onCreate
之前被调用,因此片段中的
getArguments()
返回null,这会导致null指针异常。 我应该将
getArguments()
放在片段中的何处以避免此异常

编辑:根据要求,这是整个片段的来源:

public class LoadingVehicleListFragment extends ProgressFragment
{
private VehicleListListener listener;
private VehicleListActivity activity;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    return inflater.inflate(com.devspark.progressfragment.R.layout.fragment_progress, container, false);
}

/*@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);
    int c = 0;
    listener = (VehicleListActivity)getActivity();
    getUserInformation(getArguments().getString("userID"));
}*/

private void getUserVehicles(String userID)
{
    Response.Listener<String> responseListener = new Response.Listener<String>()
    {
        @Override
        public void onResponse(String response)
        {
            try
            {
                HashMap resultMap = new ObjectMapper().readValue(response, HashMap.class);
                VehicleListRequest.ErrorCode errorCode = VehicleListRequest.ErrorCode.fromInt(Integer.parseInt(resultMap.get("error_code").toString()));

                switch (errorCode)
                {
                    case NONE:
                        parseVehicleFromMap(resultMap);
                        break;
                    case EXCEPTION_CAUGHT:
                        AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity());
                        builder2.setMessage("Eccezione catturata. \n Messaggio: " + resultMap.get("error_message"));
                        builder2.create().show();
                        break;
                }
            }
            catch (IOException e)
            {
                // TODO gestire
                e.printStackTrace();
            }
        }
    };

    VehicleListRequest request = new VehicleListRequest(userID, responseListener, null);
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    requestQueue.add(request);
}

public void getUserInformation(final String userID)
{
    Response.Listener<String> responseListener = new Response.Listener<String>()
    {
        @Override
        public void onResponse(String response)
        {
            try
            {
                HashMap resultMap = new ObjectMapper().readValue(response, HashMap.class);
                GetUserRequest.ErrorCode errorCode = GetUserRequest.ErrorCode.fromInt(Integer.parseInt(resultMap.get("error_code").toString()));

                switch (errorCode)
                {
                    case NONE:
                        listener.setLoggedUser(User.fromMap(resultMap));
                        getUserVehicles(userID);
                        break;
                    case EXCEPTION_CAUGHT:
                        AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity());
                        builder2.setMessage("Eccezione catturata. \n Messaggio: " + resultMap.get("error_message"));
                        builder2.create().show();
                        break;
                }
            }
            catch (IOException e)
            {
                // TODO gestire
                e.printStackTrace();
            }
        }
    };

    GetUserRequest request = new GetUserRequest(userID, responseListener, null);
    RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
    requestQueue.add(request);
}

private void parseVehicleFromMap(HashMap map)
{
    int i = 0;

    while (map.containsKey(String.valueOf(i)))
    {
        final Vehicle v = new Vehicle();
        HashMap vehicleMap = (HashMap) map.get(String.valueOf(i));

        v.setPlate(vehicleMap.get("plate").toString());
        v.setKm(vehicleMap.get("km") == null ? null : Integer.parseInt(vehicleMap.get("km").toString()));
        v.setInUse(Integer.parseInt(vehicleMap.get("in_use").toString()) == 1);
        v.setFuelQuantity(Double.parseDouble(vehicleMap.get("actual_fuel_quantity").toString()));
        v.setEffectiveFuelEconomy(Double.parseDouble(vehicleMap.get("effective_fuel_economy").toString()));
        v.setInsuranceDate(vehicleMap.get("insurance_date") == null ? null : new LocalDate(vehicleMap.get("insurance_date").toString()));
        v.setMatriculationDate(new LocalDate(vehicleMap.get("matriculation_date").toString()));
        v.setLatitude(vehicleMap.get("latitude") == null ? null : Double.parseDouble(vehicleMap.get("latitude").toString()));
        v.setLongitude(vehicleMap.get("longitude") == null ? null : Double.parseDouble(vehicleMap.get("longitude").toString()));
        v.setUser(activity.getLogged());

        listener.addVehicle(v);

        i++;
    }
}
} // end class
在这些异常之前,我也有一些“失败的活页夹事务”,比如:

03-27 18:30:41.955 1452-1452/com.google.android.inputmethod.latin E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 100)
03-27 18:30:41.956 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:41.999 1452-1452/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=100) 03-27 18:30:42.000 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:42.001 1452-1452/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=100) 03-27 18:30:42.002 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:42.005 1452-1452/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=100) 03-27 18:30:42.007 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:42.008 1452-1452/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=100) 03-27 18:30:42.010 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:42.026 1452-5094/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=168) 03-27 18:30:42.031 1452-5095/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=168) 03-27 18:30:43.509 1452-1452/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=100) 03-27 18:30:43.510 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:43.510 1452-1452/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=100) 03-27 18:30:43.512 1452-1452/com.google.android.inputmethod.latin E/AndroidIME:aqx:java.lang.RuntimeException:android.os.DeadObjectException:小包裹交易失败;远程进程可能已死亡 03-27 18:30:43.542 1452-5121/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=168) 03-27 18:30:43.547 1452-5120/com.google.android.inputmethod.latin E/JavaBinder:!!!活页夹事务失败!!!(包裹大小=168)


但是,它们开始出现在引发异常的操作之前,因此我认为这些错误没有影响。

创建主机活动时,在
onCreateView()
方法之后调用
onActivityCreated()
。已创建活动和片段实例以及活动的视图层次结构。此时,可以使用
findViewById()
方法访问视图。例子。在此方法中,您可以实例化需要上下文对象的对象

尝试在那里访问它,也不要在片段中存储上下文始终调用
getActivity()

该空指针是由android框架中的执行流引起的,
onCreateView()
当片段第一次绘制其用户界面时,系统调用此回调。要为片段绘制UI,必须从此方法返回一个视图组件,该组件是片段布局的根。如果片段不提供UI,则可以返回null。 因此先调用它,然后给出空指针异常。

您能试试吗

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_vehicle_list);
    vehicles = new ArrayList<>();

    String userID;
    Bunlde bundle = getIntent().getExtras();
    if(bundle != null){
        userID = bundle.getString("userID");
    }

    if(savedInstanceState == null){
          LoadingVehicleListFragment f = new LoadingVehicleListFragment();
          Bundle fArguments = new Bundle();
          fArguments.putString("userID", userID);
          f.setArguments(fArguments);
          getSupportFragmentManager().beginTransaction().replace(R.id.loadingVehicleFragment, f).commit();
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(右布局、活动、车辆列表);
车辆=新阵列列表();
字符串用户标识;
Bunlde bundle=getIntent().getExtras();
if(bundle!=null){
userID=bundle.getString(“userID”);
}
如果(savedInstanceState==null){
LoadingVehicleListFragment f=新的LoadingVehicleListFragment();
Bundle fArguments=新Bundle();
putString(“userID”,userID);
f、 设置参数(fArguments);
getSupportFragmentManager().beginTransaction().replace(R.id.loadingVehicleFragment,f).commit();
}
}

为什么要在onCreateview中调用super.onAttach?此外,您还可以在
oncrateview
中使用
getArguments()
,缺点是onCreateView速度较慢execution@Bhargav很抱歉出现了错误,这是一个复制粘贴错误,因为我尝试在片段的
onAttach
firstwait中执行
getArguments
,该片段的视图是否正在膨胀?是否确定getArguments()返回null,请发布日志跟踪。如果在的onCreate中未启动片段事务,如何调用onCreateView()activity@Jagroshan是的,我敢肯定。我已经发布了日志跟踪,我注意到之前有一个观察者发现t
03-27 18:30:41.955 1452-1452/com.google.android.inputmethod.latin E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 100)
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_vehicle_list);
    vehicles = new ArrayList<>();

    String userID;
    Bunlde bundle = getIntent().getExtras();
    if(bundle != null){
        userID = bundle.getString("userID");
    }

    if(savedInstanceState == null){
          LoadingVehicleListFragment f = new LoadingVehicleListFragment();
          Bundle fArguments = new Bundle();
          fArguments.putString("userID", userID);
          f.setArguments(fArguments);
          getSupportFragmentManager().beginTransaction().replace(R.id.loadingVehicleFragment, f).commit();
    }
}