私は、このデータをrecyclerViewで表示する必要があるよりも、webservicesからデータを取得しています。私は、recyclerViewをAsyncTaskのonPostExecuteに設定しています。まずデータを取得する必要があります。 問題は、私の活動にはビュー、私はこのメッセージを得たすべての時間がないということです...
は、ここに私のMain_activity ...RecyclerView:アダプタが接続されていません。レイアウトをスキップしますか?
public class Store_Items_Display extends AppCompatActivity
{
public String s;
private RecyclerView recyclerView;
private DataAdapter dataAdapter;
private ArrayList<String> arrayList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_store__items__display);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recyclerView = (RecyclerView) findViewById(R.id.recycleView);
dataAdapter = new DataAdapter(arrayList);
Log.i("ArrayList size :::", String.valueOf(arrayList.size()));
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(dataAdapter);
new Connection().execute();
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if (bundle != null)
{
s = (String) bundle.get("userName");
Log.i("Oncreate UserName ::: ", "Hamza");
}
else
{
Log.i("Data in intent ::;", "is Null");
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
Button submitButton = (Button) findViewById(R.id.button8);
submitButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Toast.makeText(Store_Items_Display.this, "Submitted", Toast.LENGTH_SHORT).show();
}
});
}
public boolean onOptionsItemSelected(MenuItem item)
{
Intent myIntent = new Intent(getApplicationContext(), StoreFirstActivity.class);
startActivityForResult(myIntent, 0);
return true;
}
class Connection extends AsyncTask<Void, Void, Void>
{
StringBuilder result = new StringBuilder();
final String TAG = "Items in ArrayList :::";
@Override
protected void onPreExecute()
{
super.onPreExecute();
Toast.makeText(Store_Items_Display.this, "Welcome", Toast.LENGTH_LONG);
}
@Override
protected Void doInBackground(Void... params)
{
try
{
Log.i("User Name ::: ", "Hamza");
URL url = new URL("http://10.0.3.2/FixItApp/GetData.php?user_name=khan"); // need changes here...
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(httpUrlConnection.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = reader.readLine()) != null)
{
result.append(line);
}
in.close();
reader.close();
if (!result.toString().equals(""))
{
JSONObject jsonObject = new JSONObject(result.toString());
JSONArray jsonArray = new JSONArray(jsonObject.getString("user_data"));
for (int i = 0; i < jsonArray.length(); i++)
{
String serial = jsonArray.getJSONObject(i).getString("serial_number");
String items = jsonArray.getJSONObject(i).getString("items");
String brand = jsonArray.getJSONObject(i).getString("brand");
String price = jsonArray.getJSONObject(i).getString("price");
arrayList.add(serial);
arrayList.add(items);
arrayList.add(brand);
arrayList.add(price);
Log.i(TAG, serial);
Log.i(TAG, arrayList.toString());
Log.i("ArrayList Size :::", String.valueOf(arrayList.size()));
}
}
else
{
Toast.makeText(Store_Items_Display.this, "No data found of this name", Toast.LENGTH_LONG);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
dataAdapter.notifyDataSetChanged();
}
}
}
これは私のDataAdapterクラスでは...ある
public class DataAdapter extends RecyclerView.Adapter<DataAdapter.MyViewHolder>
{
private ArrayList<String> dataList;
public DataAdapter(ArrayList<String> arrayList)
{
this.dataList = arrayList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.data_view, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
String items = dataList.get(position);
holder.serial.setText(items);
}
@Override
public int getItemCount()
{
return dataList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder
{
public TextView serial;
public TextView items;
public TextView brand;
public TextView price;
public MyViewHolder(View itemView)
{
super(itemView);
serial = (TextView) itemView.findViewById(R.id.serial);
items = (TextView) itemView.findViewById(R.id.items);
brand = (TextView) itemView.findViewById(R.id.brand);
price = (TextView) itemView.findViewById(R.id.price);
}
}
}
非常に混乱しています...あなたのonPostExecuteは 'Void aVoid'を返します...このコード行でarraylistが使用しているもの:onPostExecuteメソッドの' dataAdapter = new DataAdapter(arrayList); 'あなたの配列リストは空です...? –
私は完全なアクティビティコードをペーストしました... – Zombie
この行を移動すると、 'onCreate()'の 'dataAdapter = new DataAdapter(arrayList);の後に' new Connection()。execute(); '問題。ただし、画面の回転を無効にしない限り、画面を回転させる時間は非同期タスクを実行しますか? 'if(savedInstanceState == null)'などのようなロジックを使う方が良いでしょう。以前に指摘したように、リサイクラビューアアを一度初期化し、arraylistデータを変更するときに 'dataAdapter.notifyDataSetChanged()'を呼び出してください。 –