2014-01-19 2 views
0

Я не могу отобразить изображение i parse, потому что в getStringExtra я получаю сообщение об ошибке. КодНе удается отобразить изображение

public class SingleActivity extends Activity { 

    // JSON node keys 
    private static final String TAG_TITOLI = "titoli"; 
    private static final Bitmap TAG_IMMAGINE = immagine; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.single_item); 


     // getting intent data 
     Intent in = getIntent(); 

     // Get JSON values from previous intent 
     String titoli = in.getStringExtra(TAG_TITOLI); 
     Bitmap immagine = in.getStringExtra(TAG_IMMAGINE); //error 


     // Displaying all values on the screen 
     TextView lblName = (TextView) findViewById(R.id.titoli_label); 
     ImageView lblImg = (ImageView) findViewById(R.id.imgeIV); 


     lblName.setText(titoli); 
     lblImg.setImageBitmap(immagine); 

    } 
} 

здесь: Bitmap immagine = in.getStringExtra(TAG_IMMAGINE); я не могу понять, что писать. Я знаю, это изображение, поэтому я не могу написать String, и что? пожалуйста, спасибо

Я tryied следовать предложить, но я получаю эту ошибку в LogCat:

01-19 18:40:32.989: E/AndroidRuntime(9000): FATAL EXCEPTION: main 
01-19 18:40:32.989: E/AndroidRuntime(9000): Process: it.rs.esempioparsinglistview, PID: 9000 
01-19 18:40:32.989: E/AndroidRuntime(9000): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.rs.esempioparsinglistview/it.rs.esempioparsinglistview.SingleActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.ActivityThread.access$800(ActivityThread.java:145) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.os.Handler.dispatchMessage(Handler.java:102) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.os.Looper.loop(Looper.java:136) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.ActivityThread.main(ActivityThread.java:5081) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at java.lang.reflect.Method.invoke(Native Method) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-19 18:40:32.989: E/AndroidRuntime(9000): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.util.Base64.decode(Base64.java:118) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at it.rs.esempioparsinglistview.SingleActivity.onCreate(SingleActivity.java:44) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.Activity.performCreate(Activity.java:5231) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169) 
01-19 18:40:32.989: E/AndroidRuntime(9000):  ... 9 more 

Предыдущая активность:

public class MainActivity extends Activity { 
    ProgressDialog mProgressDialog; 
    public static final String TAG_TITOLI = "titoli"; 
    private static final String TAG_CONTENT = "content"; 
    ListView lista; 

    public Button immaginebtn; 

    static final String BLOG_URL = "http://www.multiplayer.it"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lista = (ListView)this.findViewById(R.id.main_lista);//recupero lista da id 

     //View inflatedView = getLayoutInflater().inflate(R.layout.riga_listview, null); 
     //immaginebtn = (Button)findViewById(R.id.immaginebtn); 
     //creo ed eseguo l'asynctask 
     ParsingPaginaWeb parsing = new ParsingPaginaWeb(); 
     parsing.execute(""); 

     // Immagine btn 
     /*immaginebtn.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       // Execute Logo AsyncTask 
       new Logo().execute(); 
      } 
     });*/ 
     //new Logo().execute(); 

     // Launching new screen on Selecting Single ListItem 
      lista.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        // getting values from selected ListItem 
        String titoli = ((TextView) view.findViewById(R.id.riga_listview_titolo)).getText().toString(); 
        //String cont = ((TextView) view.findViewById(R.id.riga_descrizione)).getText().toString(); 
        //String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 

        // Starting new intent 
        Intent in = new Intent(getApplicationContext(), SingleActivity.class); 
        in.putExtra(TAG_TITOLI, titoli); 
        //in.putExtra(TAG_CONTENT, cont); 
        //in.putExtra(TAG_PHONE_MOBILE, description); 
        startActivity(in); 

       } 
      }); 

    } 

    private class ParsingPaginaWeb extends AsyncTask<String,String,String> { 

     ArrayList<String> titoli; //lista dei titoli 
     List<Integer> immagine = new ArrayList<Integer>(); 
     //ArrayList<String> content; //lista delle descrizioni 

     @Override 
     protected void onPreExecute() 
     { 
      //Toast.makeText(MainActivity.this ,"Caricamento lista titoli...", Toast.LENGTH_SHORT).show(); 
      //prima di eseguire il parsing inizializzo gli arraylist 
      mProgressDialog = new ProgressDialog(MainActivity.this); 
      mProgressDialog.setTitle("Multiplayer.it"); 
      mProgressDialog.setMessage("Caricamento articoli..."); 
      mProgressDialog.setIndeterminate(false); 
      mProgressDialog.show(); 

      titoli = new ArrayList<String>(); 
      immagine = new ArrayList<Integer>(); 
      //content = new ArrayList<String>(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 

       Document doc = Jsoup.connect(BLOG_URL).get(); 
       //Elements nodeBlogStatsimg = doc.select("img[src~=(?i)\\.(jpe?g)]"); 
       Elements nodeBlogStats = doc.select("div.news-col-0 h3"); //per multiplayer.it Elements nodeBlogStats = doc.select("div.news-col-0 h3"); per ftv #comunePartINI > option 
       for(Element sezione : nodeBlogStats) 
       { 
        titoli.add(sezione.text()); 


       } 
      } catch (Exception e) { 
       // In caso di errore 
       Log.e("ESEMPIO", "ERRORE NEL PARSING"); 
      } 
      return null; 
     } 



     @Override 
     protected void onPostExecute(String result) 
     { 
      // dopo che ho eseguito il parsing mostro i dati nella listview 
      // usando il custom array adpater ParsingArrayAdapter 
      ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli, immagine); 
      lista.setAdapter(adapter); 
      mProgressDialog.dismiss(); 
      new Logo().execute(); 
     } 


    } 

    // Classe per caricamento immagini.. 

    // Logo AsyncTask 

    private class Logo extends AsyncTask<Void, Void, Void> { 
     Bitmap bitmap; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mProgressDialog = new ProgressDialog(MainActivity.this); 
      mProgressDialog.setTitle("Android Basic JSoup Tutorial"); 
      mProgressDialog.setMessage("Loading..."); 
      mProgressDialog.setIndeterminate(false); 
      mProgressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 

      try { 
       // Connect to the web site 
       Document document = Jsoup.connect(BLOG_URL).get(); 
       // Using Elements to get the class data 
       Elements img = document.select("div.news-col-0 img[src]"); 
       // Locate the src attribute 
       String imgSrc = img.attr("src"); 
       // Download image from URL 
       InputStream input = new java.net.URL(imgSrc).openStream(); 
       // Decode Bitmap 
       bitmap = BitmapFactory.decodeStream(input); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // Set downloaded image into ImageView 
      ImageView logoimg = (ImageView) findViewById(R.id.imageView1); 
      logoimg.setImageBitmap(bitmap); 
      mProgressDialog.dismiss(); 

      // ParsingArrayAdapter adapter = new ParsingArrayAdapter(MainActivity.this, titoli); 
      // lista.setAdapter(adapter); 
     } 
    } 

} 
+0

вы должны знать, что вы отправляете от предыдущей деятельности? –

+0

здесь есть предыдущая активность: http://stackoverflow.com/questions/21219448/parsing-jsoup-list –

+0

и теперь у меня есть ошибка, которую я отправил –

ответ

1

Попробуйте this-

// send where details is object... 
Intent i = new Intent(context, SingleActivity.class); 
i.putExtra(TAG_IMMAGINE, bitmap); 
startActivity(i); 


//receive in SingleActivity class... 
Bitmap immagine = (Bitmap) intent.getParcelableExtra(TAG_IMMAGINE); 
+0

Ahha это катастрофа! :) Я добавил «реализует Serializable» в моей MainActivity и в «SingleActivity» тоже .. в первом 'Метод putExtra (String, boolean) в типе Intent не применим для аргументов (String, ImageView)' –

+0

А во втором: 'Несоответствие типов: невозможно преобразовать из Serializable в Bitmap' –

0

Проблема заключается в том, что дополнительный, который передается в в наборе намерений есть строка, а не растровое изображение. Вам нужно преобразовать строку (которая я предполагаю, это путь к изображению) в растровое изображение, прежде чем вы сможете установить его в ImageView. Вам нужно будет сделать что-то вроде этого:

String path = in.getStringExtra(TAG_IMMAGINE); 
File imgFile = new File(path); 
if(imgFile.exists()){ 

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 

    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest); 
    lblImg.setImageBitmap(myImage); 

} 
+0

подождите .. это 'lblImg', где объявлено в вашем коде? –

0

Преобразование строки в растровое изображение.

String string = in.getStringExtra(TAG_IMMAGINE); 
byte [] encodeByte=Base64.decode(string,Base64.DEFAULT); 
Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
+0

, а затем 'lblImg.setImageBitmap (bitmap);'? –

+0

Не могли бы вы добавить объяснение? – i3arnon

+0

ok я попробовал, но кажется, что значение равно null. Здесь вы можете найти предыдущее действие, в котором есть значение для передачи .http: //stackoverflow.com/questions/21219448/parsing-jsoup-list Я думал, что это правильно но, похоже, нет. –

0

Скорее всего, изображение кодируется как строка Base64. Попробуйте это:

String base64Str = in.getStringExtra(TAG_IMMAGINE); 
byte[] imageBytes = Base64.decode(base64Str, DEFAULT); 
Bitmap immagine = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length); 
+0

, а затем 'lblImg.setImageBitmap (immagine);'? так что я должен изменить также 'private static final Bitmap TAG_IMMAGINE = immagine;' с 'private static final String TAG_IMMAGINE =" immagine ";'? –

+0

Да, тогда вы будете использовать 'lblImg.setImageBitmap (immagine);'. Вам нужно будет изменить 'TAG_IMMAGINE' как' String', поскольку он представляет собой ключ к намерению. – jonstaff

+0

ОК, но я получаю сообщение об ошибке, которое я только что разместил в logcat. если потребности здесь есть. activity: http://stackoverflow.com/questions/21219448/parsing-jsoup-list –

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