2015-04-06 4 views
-1

мои данные поступают из базы данных wampserver, используя php. Я могу отображать свое изображение в activity_news и то же изображение, которое мне нужно отобразить в другом действии. Мне нужно отображать изображение и текст вместе в другом действии. как это сделать.Как отправить изображение из одной активности в другую в Android?

News.java

private String URL = ""; 
// XML node keys 
static final String KEY_NEWS = "news"; // parent node 
// static final String KEY_ID = "id"; 
static final String KEY_TITLE = "Title"; 
// static final String KEY_SUBTITLE = "SubTitle"; 
static final String KEY_Details = "Details"; 
static final String KEY_THUMB_URL = "ImagePath"; 

ListView list; 
LazyAdapterNews adapter; 

JSONArray news = null; 
ServiceHandler sh; 
String jsonStr; 
ArrayList<HashMap<String, String>> newList; 

public News() { 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.activity_news, container, 
      false); 

    URL = getResources().getString(R.string.server_url) + "/new_fetch.php"; 
    newList = new ArrayList<HashMap<String, String>>(); 
    ImageView img = (ImageView) rootView.findViewById(R.id.imageView1); 
    list = (ListView) rootView.findViewById(R.id.listView1); 

    sh = new ServiceHandler(); 

    new getData(this).execute(); 

    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
      ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
      bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
      byte[] byteArray = stream.toByteArray(); 

      Intent i = new Intent(getActivity(), Prac.class); 

      String name = ((TextView) view.findViewById(R.id.Title)) 
        .getText().toString(); 
      String details = ((TextView) view.findViewById(R.id.Details)) 
        .getText().toString(); 





      i.putExtra(KEY_TITLE, name); 
      i.putExtra(KEY_Details, details); 
      i.putExtra(KEY_THUMB_URL,byteArray); 

      startActivity(i); 

     } 
    }); 

    return rootView; 
} 

private class getData extends AsyncTask<Void, Void, Void> { 

    private News activity; 

    public getData(News news) { 
     this.activity = news; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if (jsonStr != null) { 
      Log.i("jsonstr", jsonStr); 
      try { 
       JSONObject jsonObj = new JSONObject(jsonStr); 
       news = jsonObj.getJSONArray(KEY_NEWS); 
       for (int i = 0; i < news.length(); i++) { 
        JSONObject c = news.getJSONObject(i); 
        String Title = c.getString(KEY_TITLE); 
        String Details = c.getString(KEY_Details); 
        String path = c.getString(KEY_THUMB_URL); 

        HashMap<String, String> newss = new HashMap<String, String>(); 

        newss.put(KEY_TITLE, Title); 
        newss.put(KEY_Details, Details); 
        newss.put(KEY_THUMB_URL, path); 

        newList.add(newss); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      Log.e("ServiceHandler", "Couldn't get any data from the url"); 
     } 

     // Getting adapter by passing xml data ArrayList 
     adapter = new LazyAdapterNews(getActivity(), newList); 
     list.setAdapter(adapter); 

     super.onPostExecute(result); 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     jsonStr = sh.makeServiceCall(URL, ServiceHandler.GET); 
     Log.d("Response: ", "> " + jsonStr); 
     return null; 
    } 

} 

}

Prac.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_prac); 
    String title = ""; 
    String details = ""; 
    Bundle extras = getIntent().getExtras(); 
    byte[] byteArray = extras.getByteArray("picture"); 

    Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 

    Intent intent = getIntent(); 
    if (null != intent) { 
     title = intent.getStringExtra(KEY_TITLE); 
     details = intent.getStringExtra(KEY_Details); 
     Bundle b = getIntent().getExtras(); 
     String picturePath = b.getString("picture"); 
     //Bitmap bmp; 



    } 

    TextView headlineTxt = (TextView) findViewById(R.id.headlines); 
    headlineTxt.setText(title); 


    TextView descriptionTxt = (TextView) findViewById(R.id.description); 
    descriptionTxt.setText(details); 

    ImageView img = (ImageView)findViewById(R.id.imgdetails); 
    img.setImageBitmap(bmp); 



} 

}

+0

Почему бы вам просто не сохранить изображение на SD-карте? http://stackoverflow.com/questions/13577664/pass-a-bitmap-image-from-one-activity-to-another –

+0

вместо этого передайте URL. – petey

ответ

0

Вы не должны посылать любые изображения от/к деятельности. Как говорили @petey и @Yadav, вы едите передаете URL-адрес активности и снова загружаете изображение или сохраняете изображение на устройстве (хранилище) и передаете путь файла к значению и загружаете изображение снова (из этого пути к файлу)

0

Я думаю, что вы отправляете свой byteArray с помощью Key KEY_THUMB_URL, то есть «ImagePath» и пытаетесь получить его, используя ключевое «изображение». Поэтому попробуйте использовать тот же ключ, то есть 1 ключ в обоих местах либо «ImagePath», либо «picture», ,Это будет работать.

Смежные вопросы