Как синхронизировать Контроллер класса содержит AsyncTask и фрагмент - PullRequest
0 голосов
/ 02 мая 2020

Я очень очень устал, я не могу изменить видимость или объект во фрагменте из контроллера класса, например addIteamsAutomati c .progressBar.setVisibility (View.GONE); return nullpointer

FragmentAddIteamsAutomati c:

publi c класс FragmentAddIteamsAutomati c extends Fragment {

private EditText ssid, paswd;
public TextView afichage;
public Button parainage;
public Button validation;
public ProgressBar progressBar ;
public LinearLayout linearLayoutParm;
public static String sSSID,pWD;
private ControllerAddIteam controleAdd=null;


public FragmentAddIteamsAutomatic()

{

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.add_iteams_automatic, container, false);

    controleAdd.getInstance(getActivity());

    progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
    ssid = (EditText) view.findViewById(R.id.ssid);
    paswd = (EditText) view.findViewById(R.id.password);
    parainage = (Button) view.findViewById(R.id.btnParainage);
    validation = (Button) view.findViewById(R.id.btnValid);
    afichage = (TextView) view.findViewById(R.id.affichage);
    linearLayoutParm = (LinearLayout) view.findViewById(R.id.linearLayParam);
    progressBar.setVisibility(View.GONE);
    afichage.setVisibility(View.GONE);
    validation.setVisibility(View.GONE);

    parainage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            sSSID = ssid.getText().toString();
            pWD = paswd.getText().toString();
            if (sSSID.equals(""))
                Toast.makeText(getActivity(), "Vous Dever Remplir Tous les champs", Toast.LENGTH_LONG).show();
            else
                parainer();
        }
    });

    validation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            controleAdd.addSwitchToBase();
            Intent intent = new Intent(getActivity(), MainActivity.class);
            startActivity(intent);
            ControllerAddIteam.accesDistant.send("getIteams", new JSONArray());
            // finish();
        }
    });

return view; }

private void parainer(){

    controleAdd.getInstanceExecuteHandle();
}



}

ControllerAddIteam:

publi c class ControllerAddIteam {

private static ControllerAddIteam instanceAdd = null;
private static Context context;
private static WifiUtils wifiUtils;
public static String SSID = null;
public static AccesDistant accesDistant;
public static Handler mHandler;



public static final ControllerAddIteam getInstance(Context context) {
    if (context != null)
        ControllerAddIteam.context = context;
    if (ControllerAddIteam.instanceAdd == null) {
        ControllerAddIteam.instanceAdd = new ControllerAddIteam();
        accesDistant = new AccesDistant();
    }
    return ControllerAddIteam.instanceAdd;
}

public static void getInstanceExecuteHandle() {
    new ParainageHandle().execute();


}

static class ParainageHandle extends AsyncTask<String, String, String> {

    FragmentAddIteamsAutomatic addIteamsAutomatic=new FragmentAddIteamsAutomatic();



    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        addIteamsAutomatic.progressBar.setVisibility(View.GONE);
        addIteamsAutomatic.afichage.setVisibility(View.GONE);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        addIteamsAutomatic.progressBar.setVisibility(View.GONE);
        if(s.equals("valid"))
        {
            addIteamsAutomatic.linearLayoutParm.setVisibility(View.GONE);
            addIteamsAutomatic.validation.setVisibility(View.VISIBLE);
            addIteamsAutomatic.parainage.setVisibility(View.GONE);


        }
        else  if(s.equals("notvalid"))
        {
            addIteamsAutomatic.parainage.setVisibility(View.VISIBLE);
        }
    }

    @Override
    protected void onProgressUpdate(String... values) {

        addIteamsAutomatic.afichage.setVisibility(View.VISIBLE);
        addIteamsAutomatic.progressBar.setVisibility(View.VISIBLE);



            if (values[0].equals("actwifi")) {
            if (values[1].equals("true"))
                addIteamsAutomatic.afichage.setText("WIFI DEJA ACTIVEE");
            else
                addIteamsAutomatic.afichage.setText("ACTIVATION WIFI EN COURS...");

        } else if (values[0].equals("scan"))

                addIteamsAutomatic.afichage.setText("START SCAN FOR Iteams STiTo ... Please Wait");

        else if (values[0].equals("find"))
                addIteamsAutomatic.afichage.setText("STiTo : "+getTypeFromSsid(SSID)+"  DETECTEE : "+SSID);

        else if (values[0].equals("connect"))
           addIteamsAutomatic.afichage.setText("CONNECTION WITH " + SSID + "En cours ...");

        else if (values[0].equals("connectOk"))
           addIteamsAutomatic.afichage.setText("CONNECTION WITH " + SSID + "ETABLISHED");
        else if (values[0].equals("connectKo"))
           addIteamsAutomatic.afichage.setText("PROBLEM OF CONNECTION WITH " + SSID);
        else if (values[0].equals("config")) {
           addIteamsAutomatic.afichage.setText("SENDING OF CONFIGURATION TO:  "+getTypeFromSsid(SSID)+"AND SAVING DATA");
            accesDistant.sendConfig(addIteamsAutomatic.sSSID,addIteamsAutomatic.pWD);

....

Ответы [ 2 ]

0 голосов
/ 02 мая 2020
public class AddIteamActivity extends AppCompatActivity {
    ViewPager pager;
    TabLayout tab;


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

        pager = findViewById(R.id.pager);
        tab = findViewById(R.id.tab);

        AddIteamsAdapter viewPagerAdapter = new AddIteamsAdapter(getSupportFragmentManager());

        pager.setAdapter(viewPagerAdapter);
        tab.setupWithViewPager(pager);


    }

}
0 голосов
/ 02 мая 2020
  1. Вы объявляете фрагмент в AsyncTask и не вызываете замену или добавление, это означает, что этот фрагмент никогда не показывается и он не вызывает onCreateView
FragmentAddIteamsAutomatic addIteamsAutomatic=new FragmentAddIteamsAutomatic();
Возможно, вам следует передать ссылку addIteamsAutomati c в класс ControllerAddIteam. но, пожалуйста, убедитесь, что он будет вызван в MainThread, потому что AsyncTask имеет метод doInBackground в фоновом потоке. Рекомендуется использовать ссылку на фрагмент WeakReference
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...