Хранить данные API в массиве - PullRequest
0 голосов
/ 25 июня 2018

Я занимаюсь разработкой базового приложения для викторины, но застрял в части API.В API у нас есть ключевые слова «вопрос», «выбор», «выбор» и «правильный».Я хочу сохранить значения ключевых слов «вопрос» и «выбор» в массиве или разных массивах, добавить фрагмент до номера вопроса, а также добавить эти вопросы и варианты выбора для активности фрагмента.Я поделился примером скриншота, как это должно выглядеть.Layour не так важен, мне нужен только Java-код. Если вы можете мне помочь, я был бы признателен.Спасибо.

Нажмите для скриншота

Это мой MainActivity.java

package myusarisoy.quizmasters;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
Frag frag = new Frag();
ViewPager vp;
RequestQueue requestQueue;
String[] abc, cba;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    vp = findViewById(R.id.vp);
    requestQueue = Volley.newRequestQueue(this);

    FragmentPagerAdapter fpa = new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(final int position) {
            String url = "https://private-anon-a98702efdd-quizmasters.apiary-mock.com/questions";
            final JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            try {
                                for(int i = 0; i < response.length(); i++) {
                                    JSONObject jrResponse = response.getJSONObject(i);
                                    String question = jrResponse.getString("question");
                                    abc = new String[question.length()];
                                    JSONArray choiceArray = jrResponse.getJSONArray("choices");

                                    for(int j = 0; j < choiceArray.length(); j++) {
                                        JSONObject currentChoice = choiceArray.getJSONObject(j);
                                        String choice = currentChoice.getString("choice");
                                        cba = new String[choice.length()];

                                        String q = abc[i];
                                        String c = cba[j];

                                        Bundle b = new Bundle() ;
                                        b.putString("tvQ", q);
                                        b.putString("tvC", c);

                                        frag.setArguments(b);

                                    }
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("myusarisoy", "Error...");
                }
            });
            requestQueue.add(request);

            return frag;
        }

        @Override
        public int getCount() {
            return abc.length;
        }
    };

    // Set PagerAdapter to ViewPager
    vp.setAdapter(fpa);
}

 public void importantTask() {
    Log.e("myusarisoy", "Important Task...");
 }
}

Это мой activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v4.view.ViewPager>

</LinearLayout>

Это моя Frag.java

package myusarisoy.quizmasters;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Frag extends Fragment {
View root;
TextView tvQuestion, tvChoices;

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable         ViewGroup container, @Nullable Bundle savedInstanceState) {
    root = inflater.inflate(R.layout.activity_frag, container, false);
    tvQuestion = root.findViewById(R.id.tvq);
    tvChoices = root.findViewById(R.id.tvc);

    String tvQ = getArguments().getString("tvQ");
    String tvC = getArguments().getString("tvC");

    tvQuestion.setText(tvQ);
    tvChoices.setText(tvC);

    MainActivity ma = (MainActivity) getActivity();
    ma.importantTask();

    return root;
}
}

Это моя деятельность_frag.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Frag">

<TextView
    android:layout_marginTop="200sp"
    android:id="@+id/tvq"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textSize="20sp"
    android:textColor="#000000"
    android:textStyle="bold"
    android:text="Question"
    android:gravity="center"/>

<TextView
    android:layout_marginTop="50sp"
    android:id="@+id/tvc"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textSize="17sp"
    android:textColor="#000000"
    android:textStyle="bold"
    android:text="Answers"
    android:gravity="center"/>

</LinearLayout>

1 Ответ

0 голосов
/ 25 июня 2018

Я думаю, вы поняли это немного назад.

Вам нужно будет получить вопросы, затем составить список фрагментов, а затем построить адаптер.

Это будет выглядеть так

// directly in onCreate 
final List<Frag> frags = new ArrayList<>();
String url = "https://private-anon-a98702efdd-quizmasters.apiary-mock.com/questions";
final JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
        frags.clear();
        try {
            for(int i = 0; i < response.length(); i++) {
                JSONObject jrResponse = response.getJSONObject(i);
                String question = jrResponse.getString("question");
                abc = new String[question.length()];
                JSONArray choiceArray = jrResponse.getJSONArray("choices");
                // TODO: parse the JSON to get arguments 

                Frag f = new Frag();
                f.setArguments(...);  // set the arguments
                frags.add(f); // store for the adapter 
        } catch (JSONException e) {
            e.printStackTrace();
        } 
        // Create a PagerAdapter here using list of Fragments 

        // set adapter to viewpager here 

    } // end of onResponse 

Тогда, например, getItem, вы бы вернули frags.get(position)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...