2016-09-13 8 views
0

これは、画像を読み込むための私のアクティビティクラスです。JSON + picasso画像の読み込みに時間がかかります

package oerrride.we.huzykamz.newsfeed; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.GridView; 
import android.widget.ProgressBar; 
import android.widget.Toast; 

import java.io.InputStream; 
import java.net.URL; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 


    ProgressBar pb; 


    List<NewsModel> flowerList; 
    RecyclerView mRecycler; 
    NewsAdapter2 adapter; 
    List<MyTask> tasks; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     pb =(ProgressBar) findViewById(R.id.progressBarNews); 
     mRecycler =(RecyclerView) findViewById(R.id.recycler_view_news); 
     mRecycler.setLayoutManager(new LinearLayoutManager(this)); 



     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 




     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 




     final String url ="http://10.0.2.2/UgandaMedicalAccess/HealthCentreNews/fecth.php"; 
     if(netInfo != null && netInfo.isConnectedOrConnecting()) { 
      new MyTask().execute(url); 
     } 
     else{ 
      Toast.makeText(this,"No network connection! , please check your connectivity",Toast.LENGTH_LONG).show(); 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 
    protected void updateDisplay() { 
     adapter = new NewsAdapter2(MainActivity.this, flowerList); 
     mRecycler.setAdapter(adapter); 
    } 




    private class MyTask extends AsyncTask<String, String,List<NewsModel>> { 

     @Override 
     protected void onPreExecute() { 

      setProgressBarIndeterminateVisibility(true); 
     } 

     @Override 
     protected List<NewsModel> doInBackground(String... params) { 


      String content = HttpManager.getData(params[0], "feeduser", "feedpassword"); 
      flowerList = NewsParser.parseFeed(content); 




        return flowerList; 


     } 

     @Override 
     protected void onPostExecute(List<NewsModel> newsModels) { 
/* tasks.remove(this); 
      if (tasks.size() == 0) { 
       pb.setVisibility(View.INVISIBLE); 
      } 
*/ 
      pb.setVisibility(View.INVISIBLE); 
      if (newsModels == null) { 
       Toast.makeText(MainActivity.this, "Data is not available", Toast.LENGTH_LONG).show(); 
       return; 
      } 

      flowerList = newsModels; 
      updateDisplay(); 
     } 



    } 

} 

そして、これが私のHttpManager.javaクラス

package oerrride.we.huzykamz.newsfeed; 

import android.util.Base64; 
import android.util.Log; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

/** 
* Created by HUZY_KAMZ on 2/5/2016. 
*/ 
public class HttpManager { 


    public static String ata(String uri) { 

     BufferedReader reader = null; 

     try { 
      URL url = new URL(uri); 
      HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

      StringBuilder sb = new StringBuilder(); 
      reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

      String line; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 

      return sb.toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
        return null; 
       } 
      } 
     } 

    } 

    public static String getData(String uri, String userName, String password) { 

     BufferedReader reader = null; 
     HttpURLConnection con = null; 

     byte[] loginBytes = (userName + ":" + password).getBytes(); 
     StringBuilder loginBuilder = new StringBuilder() 
       .append("Basic ") 
       .append(Base64.encodeToString(loginBytes, Base64.DEFAULT)); 

     try { 
      URL url = new URL(uri); 
      con = (HttpURLConnection) url.openConnection(); 

      con.addRequestProperty("Authorization", loginBuilder.toString()); 

      StringBuilder sb = new StringBuilder(); 
      reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

      String line; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 

      return sb.toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      try { 
       int status = con.getResponseCode(); 
       Log.d("HttpManager", "HTTP response code: " + status); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      return null; 
     } finally { 
      if (reader != null) { 
       try { 
        reader.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
        return null; 
       } 
      } 
     } 


}} 

マイJSONParserクラスです

package oerrride.we.huzykamz.newsfeed; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by HUZY_KAMZ on 2/7/2016. 
*/ 
public class NewsParser { 

    public static List<NewsModel> parseFeed(String content) { 

     try { 
      JSONArray ar = new JSONArray(content); 
      List<NewsModel> flowerList = new ArrayList<>(); 

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

       JSONObject obj = ar.getJSONObject(i); 
       NewsModel healthc = new NewsModel(); 
       healthc.setDetails(obj.getString("Details")); 
       healthc.setHeadlines(obj.getString("Headlines")); 
       healthc.setPhoto(obj.getString("photo")); 


       flowerList.add(healthc); 
      } 

      return flowerList; 
     } catch (JSONException e) { 
      e.printStackTrace(); 
      return null; 
     } 

    } 
} 

これはRecyclerViewで私のイメージをロードしています方法です。

@Override 
    public void onBindViewHolder(final NewsViewHolder holder,final int position) { 
     final NewsModel feedItems = itemList.get(position); 



     holder.root.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(NewsAdapter2.this.context, NewsInformation.class); 
       intent.putExtra(NewsViewHolder.KEY_HEADLINES, feedItems.getHeadlines()); 
       intent.putExtra(NewsViewHolder.KEY_DETAILS, feedItems.getDetails()); 

       context.startActivity(intent); 


       //Download image using picasso library 
       Picasso.with(context).load(url_load_images + feedItems.getPhoto()) 
         .error(R.mipmap.ic_launcher). 
         resize(120, 50) 
         .placeholder(R.mipmap.ic_launcher).into(holder.newspic); 

       holder.headlines.setText(itemList.get(position).getHeadlines()); 




      } 
     });} 

JSONデータに加えて画像が読み込まれると、これはなぜ項目をクリックした後?

答えて

0

基本的には、

あなたは画像をロードするために使用picassoimageurlを取得する必要があります(これ以上の解決策はありません)、しかし、あなたは(あなたが直接使用して文字列にストリームデータを保存する必要がありますしているStreamを解析するGsonを使用することができます解析する前に)、それはより速くなります。

P/sアダプタを設定しないでください。notifyDatasetChagnge()を使用してアダプタをリフレッシュする必要があります。

+0

返信いただきありがとうございますが、このようなことではまだ新しいですが、ピカソを使用する前にどうやってイメージを設定すればいいですか? :) –

関連する問題