2016-09-01 6 views
1

Я разбираю json-файл в java для Android-приложения.parsing json file as imageButton

В моем json-файле есть ссылка на изображение для кнопки изображения и ссылка на воспроизведение по клику. в приложении это показать все, но когда я нажимаю на изображение.

{ "channels": 
[ 
    { 
     "name": "News", 
     "link": "http://something.comchunks.m3u8", 
     "cat": "news", 
     "image": "http://www.logo.com/img.png" 
    } 
    ] 

} 

Java-код здесь:

public class ActorAdapter extends ArrayAdapter<Actors> { 
    ArrayList<Actors> listItem; 
    LayoutInflater inflater; 
    int Resource; 
    ViewHolder holder; 
    private String url; 


    public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) { 
     super(context, resource, objects); 
     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     Resource = resource; 
     listItem = objects; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // convert view = design 
     View v = convertView; 

     if (v == null) { 
      holder = new ViewHolder() ; 
      v = inflater.inflate(Resource, null); 
      holder.imageview = (ImageButton) v.findViewById(R.id.ivImage); 
      holder.tvName = (TextView) v.findViewById(R.id.tvName); 

      holder.tvcat = (TextView) v.findViewById(R.id.tvCountryt); 
      holder.tvuri = (TextView) v.findViewById(R.id.link); 


      v.setTag(holder); 
     } else { 
      holder = (ViewHolder) v.getTag(); 
     } 
     holder.imageview.setImageResource(R.drawable.ic_launcher); 
     new DownloadImage(holder.imageview).execute(listItem.get(position).getImage()); 
     holder.tvName.setText(listItem.get(position).getName()); 

     holder.tvcat.setText(listItem.get(position).getcat()); 
     holder.tvuri.setText(listItem.get(position).getlink()); 
     return v; 

    } 

    static class ViewHolder { 
     public ImageButton imageview; 
     public TextView tvName; 
     public TextView tvcat; 
     public TextView tvuri; 

    } 

    private class DownloadImage extends AsyncTask<String, Void, Bitmap> { 

     ImageButton bmImage; 

     public DownloadImage(ImageButton bmImage) { 
      this.bmImage = bmImage; 
     } 

     @Override 
     protected Bitmap doInBackground(String... urls) { 
      // TODO Auto-generated method stub 

      String urldisplay = urls[0]; 
      Bitmap Icon = null; 

      try{ 
        InputStream in = new java.net.URL(urldisplay).openStream(); 

        Icon = BitmapFactory.decodeStream(in); 

       }catch(Exception e){ 

        Log.e("Error", e.getMessage()); 

        e.printStackTrace(); 
       } 

      return Icon; 
     } 

     /* (non-Javadoc) 
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object) 
     */ 
     @Override 
     protected void onPostExecute(Bitmap result) { 
      // TODO Auto-generated method stub 

      bmImage.setImageBitmap(result); 

     } 

    } 
} 

стек журнала трассировки

09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing D/AndroidRuntime: Shutting down VM 
09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x55d89b20) 
09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing I/Process: Sending signal. PID: 23927 SIG: 9 
09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing D/AndroidRuntime: procName from cmdline: com.tutorial.Jsonparsing 
09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing E/AndroidRuntime: in writeCrashedAppName, pkgName :com.tutorial.Jsonparsing 
09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing D/AndroidRuntime: file written successfully with content: com.tutorial.Jsonparsing StringBuffer : ;com.tutorial.Jsonparsing 
09-01 10:59:10.111 23927-23927/com.tutorial.Jsonparsing E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.tutorial.Jsonparsing, PID: 23927 
                      java.lang.IllegalStateException: Could not find a method new(View) in the activity class com.android.tools.fd.runtime.BootstrapApplication for onClick handler on view class android.widget.ImageButton with id 'ivImage' 
                       at android.view.View$1.onClick(View.java:3815) 
                       at android.view.View.performClick(View.java:4443) 
                       at android.view.View$PerformClick.run(View.java:18442) 
                       at android.os.Handler.handleCallback(Handler.java:733) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:136) 
                       at android.app.ActivityThread.main(ActivityThread.java:5021) 
                       at java.lang.reflect.Method.invokeNative(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:515) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
                       at dalvik.system.NativeStart.main(Native Method) 
                      Caused by: java.lang.NoSuchMethodException: new [class android.view.View] 
                       at java.lang.Class.getConstructorOrMethod(Class.java:472) 
                       at java.lang.Class.getMethod(Class.java:857) 
                       at android.view.View$1.onClick(View.java:3808) 
                       at android.view.View.performClick(View.java:4443)  
                       at android.view.View$PerformClick.run(View.java:18442)  
                       at android.os.Handler.handleCallback(Handler.java:733)  
                       at android.os.Handler.dispatchMessage(Handler.java:95)  
                       at android.os.Looper.loop(Looper.java:136)  
                       at android.app.ActivityThread.main(ActivityThread.java:5021)  
                       at java.lang.reflect.Method.invokeNative(Native Method)  
                       at java.lang.reflect.Method.invoke(Method.java:515)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)  
                       at dalvik.system.NativeStart.main(Native Method)  
+0

пожалуйста, поделитесь своим журнала трассировки стека –

+0

Что ваш класс активности? –

ответ

0

@Fahad проблема может быть здесь, на этой линии

holder.imageview = (ImageButton) v.findViewById(R.id.ivImage); 

, вы имеете ImageView инициализирован в вашем классе держателя, и теперь вы делаете его в ImageButton. Замените его на ImageView и убедитесь, что у вас есть ImageView ссылка где-нибудь в вашем макете + держатель и произведите его правильно.

+0

это не проблема –

0

Вам нужно добавить макет, где ivimage ..

Initilize ...

private Context mContext; 



public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) { 
    super(context, resource, objects); 

mContext=context 
    } 






if (v == null) { 
     holder = new ViewHolder() ; 
     v = View.inflate(mContext, R.layout.row_layout, null); 
     holder.imageview = (ImageButton) v.findViewById(R.id.ivImage); 
     .....remaning code... 

    } 
+0

ошибка в контексте –

+0

contxt здесь Youractivity.this –

+0

Сделайте обновление, как это в коде Обновления, ответьте на вопрос –

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

  • Нет связанных вопросов^_^