Где определить класс Asyn c в проекте с несколькими вкладками android - PullRequest
0 голосов
/ 02 апреля 2020

Я работаю над проектом android с тремя вкладками (3 вкладки создаются с использованием класса Fragment). Я создал один внутренний класс Asyn c в Mainactivity и вызывал этот класс из onCreate (), но в Logcat ничего не происходит. Может кто-нибудь предложить мне Где определить класс Asyn c, который получает ресурс в формате JSON. Любой лучший способ сделать это тоже приветствуется.


package com.utb.iftekhar.cityweatherappsnapshot1;

public class Tab2Fragment extends Fragment {

    private static final String TAG="Tab2Fragment";


    private Button button;
    private static  final String CITY_NAME_SEARCHED="cityNameSearched";

    private List<String> historyList;
    private ListView historyListView;
    private ArrayAdapter<String> arrayAdapter;

    String cityNameSearched="";

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.tab2_frag, container, false);
        historyListView=view.findViewById(R.id.historyList);
        historyList=new ArrayList<>();

        if(getArguments()!=null){
            cityNameSearched=getArguments().getString(CITY_NAME_SEARCHED);//Not able to set values to the ctiNameSearched variable.
        }else
        {
            Log.i("No","Arguments");//
        }

       if(!(cityNameSearched==null)  ||  !cityNameSearched.equals("")){
           historyList.add(cityNameSearched);
           Log.i("before", cityNameSearched);
           Log.i("Value in tab2frag",cityNameSearched);
       }


        return view;
 }

//This method is returning the searched city name searched int the edit text from fragment(Tab1Fragment) but not able to access this value in cityNameSearched variable.
    public void updateEditText(String newText){
        Log.i("received from 1 in 2",newText);
        this.cityNameSearched=newText;
    }

/*
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if(context instanceof Tab2FragmentListener){
            tab2FragmentListener=(Tab2FragmentListener)context;
        }else{
            throw new RuntimeException(context.toString()+
                    " must implement Tab2FragmentListener"
            );
        }
    }


    @Override
    public void onDetach() {
        super.onDetach();
        tab2FragmentListener=null;
    }*/



}

public class Tab1Fragment extends Fragment{
    private String weatherResults;
    private Tab1FragmentListener tab1FragmentListener;
    private String cityNameSearched;

    public interface Tab1FragmentListener{
        void onInput1Set(String input);
    }
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
       @Nullable Bundle savedInstanceState) {
       View view=inflater.inflate(R.layout.tab1_frag, container, false);
        getWeatherButton=(Button)view.findViewById(R.id.getWeatherButton);
        searchCityByName=(EditText)view.findViewById(R.id.searchCityByName);
        weatherResultTextView=(TextView)view.findViewById(R.id.weatherResult);
        mainActivity=new MainActivity();



        getWeatherButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {    
                downloadTask=new DownloadTask(new DownloadTask.AsyncResponse() {

                    @Override
                    public void processFinish(String output) {

                        if(!output.equals("")){

                            weatherResultTextView.setText(output);
                        }else{
                            weatherResultTextView.setText("");
                        }
                    }
                });
                  cityNameSearched=searchCityByName.getText().toString().trim();
                    tab1FragmentListener.onInput1Set(cityNameSearched);
                Log.i("CityNameSearched", cityNameSearched);
                try {
                    String encodedCityName= URLEncoder.encode(cityNameSearched,"UTF-8" );
                } catch (Exception e) {
                    e.printStackTrace();
                }

                downloadTask.execute("https://openweathermap.org/data/2.5/weather?q="+cityNameSearched+"&appid=b6907d289e10d714a6e88b30761fae22");

                Log.i("Button Cliked","Clicked");
                InputMethodManager mgr=(InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.hideSoftInputFromWindow(searchCityByName.getWindowToken(), 0);

            }
        });
        return view;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if(context instanceof Tab1FragmentListener){
            tab1FragmentListener=(Tab1FragmentListener)context;
        }else{
            throw new RuntimeException(context.toString()+
            " must implement Tab1FragmentListener"
            );
        }
    }


    @Override
    public void onDetach() {
        super.onDetach();
        tab1FragmentListener=null;
    }

    public void updateEditText(String newText){
        searchCityByName.setText(newText);
    }

}

public class MainActivity extends AppCompatActivity implements Tab1Fragment.Tab1FragmentListener {
    private static final String TAG="MainActivity";
    private SectionsPageAdapter mySectionPageAdapter;
    private ViewPager viewPager;
    private DataForTabs dataForTabs;
    private Tab1Fragment tab1Fragment;
    private Tab2Fragment tab2Fragment;
    String input="";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d(TAG,"onCreate: Starting.");
        tab1Fragment=new Tab1Fragment();

        Log.i(" From 1 to main ", input);//No Log appears for this input variable

        mySectionPageAdapter=new SectionsPageAdapter(getSupportFragmentManager());
        //set up the ViewPager with the sections adaptor
        viewPager=(ViewPager)findViewById(R.id.container);
        setupViewPager(viewPager);

        TabLayout tabLayout=(TabLayout)findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    public void setupViewPager(ViewPager viewPager){
        SectionsPageAdapter adapter=new 
       SectionsPageAdapter(getSupportFragmentManager());
        adapter.addFragment(new Tab1Fragment(),"Home");
        adapter.addFragment(new Tab2Fragment(),"History");
        adapter.addFragment(new Tab3Fragment(),"About");
        viewPager.setAdapter(adapter);
    }

    @Override
    public void onInput1Set(String input) {

          tab2Fragment.updateEditText(input);
           this.input=input;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...