2009-12-21 4 views
0

Я очень новичок в разработке Android, а также в Java. Я разработал приложение, которое получает URL-адрес изображения с сайта и захочет загрузить его в устройство, а позже я хотел бы включить пользователей, чтобы установить его в качестве обоев. однако, я столкнулся с проблемой при назначении события onclick на кнопку.

Как только я раскомментирую строку красным цветом, появится окно с сообщением о том, что приложение неожиданно остановилось. Может кто-нибудь, пожалуйста, помогите мне с этим?принудительное закрытие при назначении onclick на кнопку

private ImageView imView = null; 

public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 
setContentView(R.layout.main); 

try { 
/* Create a URL we want to load some xml-data from. */ 
URL url = new URL(xmlURL); 
/* Get a SAXParser from the SAXPArserFactory. */ 
SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 

/* Get the XMLReader of the SAXParser we created. */ 
XMLReader xr = sp.getXMLReader(); 
/* Create a new ContentHandler and apply it to the XML-Reader */ 
ExampleHandler myExampleHandler = new ExampleHandler(); 
xr.setContentHandler(myExampleHandler); 

/* Parse the xml-data from our URL. */ 
xr.parse(new InputSource(url.openStream())); 
/* Parsing has finished. */ 

/* Our ExampleHandler now provides the parsed data to us. */ 
ParsedExampleDataSet parsedExampleDataSet = myExampleHandler 
.getParsedData(); 

/* Set the result to be displayed in our GUI. */ 
if (myExampleHandler.filenames != null) { 
a = a + "\n" + myExampleHandler.filenames + ", by " 
+ myExampleHandler.authors + "\nhits: " 
+ myExampleHandler.hits + " downloads"; 
this.ed = myExampleHandler.thumbs; 
this.imageURL = myExampleHandler.mediafiles; 
} 
} catch (Exception e) { 
a = e.getMessage(); 
} 

// get thumbnail 
Context context = this.getBaseContext(); 
if (ed.length() != 0) { 
Drawable image = ImageOperations(context, this.ed, "image.jpg"); 
ImageView imgView = new ImageView(context); 
imgView = (ImageView) findViewById(R.id.image1); 
imgView.setImageDrawable(image); 
} 

TextView tv = (TextView) findViewById(R.id.txt_name); 
tv.setText(a); 

Button bt3 = (Button) findViewById(R.id.get_imagebt); 
//bt3.setOnClickListener(getImageBtnOnClick); 
} 

OnClickListener getImageBtnOnClick = new OnClickListener() { 
public void onClick(View view) { 
downloadFile(imageURL); 
} 
}; 

void downloadFile(String fileUrl) { 
     URL myFileUrl = null; 
     try { 
      myFileUrl = new URL(fileUrl); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     try { 
      HttpURLConnection conn = (HttpURLConnection) myFileUrl 
        .openConnection(); 
      conn.setDoInput(true); 
      conn.connect(); 
      int length = conn.getContentLength(); 

      InputStream is = conn.getInputStream(); 

      bmImg = BitmapFactory.decodeStream(is); 
      // this.imView.setImageBitmap(bmImg); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

private Drawable ImageOperations(Context ctx, String url, 
      String saveFilename) { 
     try { 
      InputStream is = (InputStream) this.fetch(url); 
      Drawable d = Drawable.createFromStream(is, "src"); 
      return d; 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      return null; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 
public Object fetch(String address) throws MalformedURLException, 
     IOException { 
    URL url = new URL(address); 
    Object content = url.getContent(); 
    return content; 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:id="@+id/viewgroup"> 
    <ImageView android:id="@+id/image1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" /> 
    <ImageView android:id="@+id/image2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" /> 
    <TextView android:id="@+id/txt_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" /> 
    <Button id="@+id/get_imagebt" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="xxx Get an image" 
     android:layout_gravity="center" /> 
    <ImageView id="@+id/imview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" /> 
</LinearLayout> 
+0

Привет, вы можете найти дополнительную информацию с помощью logcat. Откройте командную строку (Start ... Run ... 'cmd') и перейдите в свой каталог Android SDK (если только он не находится в вашей среде PATH). Перейдите в папку инструментов и введите «adb.exe logcat». Затем запустите приложение и проверьте вывод в командной строке. Он будет генерировать исключение, и с этой детализацией проще сузить проблему. – keyboardP

+0

Е/AndroidRuntime (711): Uncaught обработчик: нить Основного выхода из-за неперехваченные е xception Х/AndroidRuntime (711): java.lang.RuntimeException: Невозможно запустить активность Co mponentInfo {resonet.example.getImage/resonet. example.getImage.getImage}: java.la ng.NullPointerException – Lynnooi

+0

Е/AndroidRuntime (711): в android.app.ActivityThread.performLaunchActiv Ity (ActivityThread.java:2268) E/AndroidRuntime (711): в андроида. app.ActivityThread.handleLaunchActivi ти (ActivityThread.java:2284) Е/AndroidRuntime (711): в android.app.ActivityThread.access $ 1800 (Activi tyThread.java:112) Х/AndroidRuntime (711): в андроиде .app.A ctivityThread $ H.handleMessage (Ac tivityThread.java:1692) – Lynnooi

ответ

0

Пожалуйста, проверьте вид catlog в течение сообщения об ошибках. Если это nullPointerException, то, возможно, кнопка id «get_imagebt» не является частью файла, который вы задали как представление содержимого? Не могли бы вы также разместить файл макета main.xml?
С уважением!

+0

Я проверил catlog, и я нашел исключение nullPointerException. таким образом, как я могу это исправить? Большое спасибо за вашу помощь. – Lynnooi

0

Код, который вы отправили, не показывает функцию downloadFile(); это поможет, если вы вставьте его тоже. Также вы можете указать исключение, которое вы получаете (проверить logcat)?

Проблема, о которой я могу думать, может не иметь разрешения INTERNET в вашем файле манифеста.

+0

Я добавил функцию файла загрузки. Для разрешения INTERNET я уже включил его в файл манифеста. Я могу получить данные, необходимые с удаленного сайта. – Lynnooi