0

このオーバーライドされたメソッド内からクラス変数を設定しようとしています。これが別のスレッドで実行されることを理解しています。そこから出力すると、値が得られます。以下のメソッドで出力すると、値は null になります。

このクラス変数を正しい方法で設定するにはどうすればよいですか?

public class MainActivity extends AppCompatActivity {

    private String[] mRestTitles = new String[2];

    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {
                        JSONObject rootObject = response.getJSONObject("_embedded");
                        JSONArray users = rootObject.getJSONArray("users");

                        for (int i = 0; i < users.length(); i++) {

                            JSONObject o = users.getJSONObject(i);
                            mRestTitles[i] = o.getString("firstName");

                            Log.d("item", mRestTitles[i]);
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.d("erro", error.toString());
                }
            }

    );

    queue.add(request);


public ArrayList<Entry> generateEntryList(){

    String[] entryTitles = getResources().getStringArray(R.array.entry_names);
    String[] entryDescriptions = getResources().getStringArray(R.array.entry_description);

    ArrayList<Entry> entries = new ArrayList<>();

    for(int i = 0; i < mRestTitles.length; i++){
        // mRestTitles is here null
        Log.d("foo", mRestTitles[i]);
        entries.add(new Entry(mRestTitles[i], entryDescriptions[i]));
    }

    return entries;
}
4

1 に答える 1

0

この状況に対処するには、次の手順に従います。

1)変数としてパラメータを使用して独自のインターフェイスを作成します(どこでも使用する必要があります)

public interface yourInterface
{
    public void updateMyVariable(String variable);
}

2)変数の値を受け取りたい場所にそのインターフェースを実装します。

@override
public void updateMyVariable(String variable)
{
  //get the value here 
}

3) このように変数の値を取得したらすぐに、onResponse メソッドからインターフェイスを呼び出します。

yourInterface.updateMyVariable( VariableToBeUsed );

インターフェイス オブジェクトに、関数を実装/オーバーライドしているアクティビティのコンテキストへの参照があることを確認してください。

于 2017-11-27T20:56:43.080 に答える