2016-04-18 7 views
-1

私は、このデータを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); 
     } 
    } 
} 
+0

非常に混乱しています...あなたのonPostExecuteは 'Void aVoid'を返します...このコード行でarraylistが使用しているもの:onPostExecuteメソッドの' dataAdapter = new DataAdapter(arrayList); 'あなたの配列リストは空です...? –

+0

私は完全なアクティビティコードをペーストしました... – Zombie

+0

この行を移動すると、 'onCreate()'の 'dataAdapter = new DataAdapter(arrayList);の後に' new Connection()。execute(); '問題。ただし、画面の回転を無効にしない限り、画面を回転させる時間は非同期タスクを実行しますか? 'if(savedInstanceState == null)'などのようなロジックを使う方が良いでしょう。以前に指摘したように、リサイクラビューアアを一度初期化し、arraylistデータを変更するときに 'dataAdapter.notifyDataSetChanged()'を呼び出してください。 –

答えて

1

コードはいくつかの点で悪いです。データを取得するたびに新しいアダプタを設定すると、notifyDataSetChanged()コールのポイントはありません。しかし実際にはむしろ代わりに行うべきことはで、データではなくアダプタを置き換えて、既存のアダプタでdataAdapter.notifyDataSetChanged();と呼んでデータが変更されたことを知らせます。

+0

私はあなたの答えをundestand持っていますが、notifyDataSetChanged()を削除した後でも私はまだそのメッセージを持っていて、まだ自分のアクティビティでビューを持っていません... – Zombie

+0

あなたはリサイクラビューをonCreate/onCreateViewで設定する必要があります。データがない場合、アダプタは「空」になります。しかしそれはそこにあり、リサイクル業者は不平を言うことはありません。また、代わりに新しいアダプタを作成することをお勧めします。 –

+0

私はrecyclerViewをonCreateで初期化していますが、onCreateでrecyclerViewを設定できません.WebServiceレスポンスを待つ必要があります... – Zombie

関連する問題