Я новичок в разработке Android.
Я следую онлайн-уроку.
В настоящее время я изучаю темы.Ошибка приложения при вызове InputStream
Я пробовал комментировать и поджаривать в следующем коде, чтобы найти свою ошибку.
Я предполагаю, что ошибка указана в строке inputStream = connection.getInputStream();
.
Если я прокомментирую эту строку и цикл while, приложение будет работать плавно.
Пожалуйста, помогите.
package com.example.vivzmultithreadingexample;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity implements OnItemClickListener {
private EditText editText;
private ListView listView;
private String[] listofImages;
private ProgressBar progessBar;
private LinearLayout loadingSection = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText1);
listView = (ListView) findViewById(R.id.urlList);
listView.setOnItemClickListener(this);
listofImages = getResources().getStringArray(R.array.imageUrls);
progessBar = (ProgressBar) findViewById(R.id.downloadProgress);
}
public void downloadImage(View v){
//Toast.makeText(this, "button Clicked", Toast.LENGTH_SHORT).show();
Thread myThread = new Thread(new DownloadImagesThread());
myThread.run();
}
public boolean downloadImageUsingThread(String url){
boolean sucessful = false;
URL downloadUrl = null;
HttpURLConnection connection= null;
InputStream inputStream = null;
try {
downloadUrl = new URL(url);
connection =(HttpURLConnection) downloadUrl.openConnection();
inputStream = connection.getInputStream();
int read = -1;
while((read =inputStream.read()) !=-1){
L.m(""+read);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
L.m(""+e);
} catch (IOException e) {
// TODO Auto-generated catch block
L.m(""+e);
}finally{
if(connection != null){
connection.disconnect();
}
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
L.m(""+e);
// TODO Auto-generated catch block
}
}
}
Toast.makeText(this, connection.toString(), Toast.LENGTH_SHORT).show();
return sucessful;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
editText.setText(listofImages[arg2]);
}
public class DownloadImagesThread implements Runnable {
public void run() {
downloadImageUsingThread(listofImages[0]);
editText.setText(listofImages[0]);
}
}
}
Logcat:
08-05 09:52:45.082: D/BstCommandProcessor-Application(1928): Application crash has been observed.
08-05 09:52:45.082: I/Process(9680): Sending signal. PID: 9680 SIG: 9
08-05 09:52:45.082: E/AndroidRuntime(9680): FATAL EXCEPTION: main
08-05 09:52:45.082: E/AndroidRuntime(9680): Process: com.example.vivzmultithreadingexample, PID: 9680
08-05 09:52:45.082: E/AndroidRuntime(9680): java.lang.IllegalStateException: Could not execute method of the activity
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.view.View$1.onClick(View.java:3828)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.view.View.performClick(View.java:4443)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.view.View$PerformClick.run(View.java:18433)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.os.Handler.handleCallback(Handler.java:733)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.os.Handler.dispatchMessage(Handler.java:95)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.os.Looper.loop(Looper.java:136)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.app.ActivityThread.main(ActivityThread.java:5021)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.lang.reflect.Method.invokeNative(Native Method)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.lang.reflect.Method.invoke(Method.java:515)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
08-05 09:52:45.082: E/AndroidRuntime(9680): at dalvik.system.NativeStart.main(Native Method)
08-05 09:52:45.082: E/AndroidRuntime(9680): Caused by: java.lang.reflect.InvocationTargetException
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.lang.reflect.Method.invokeNative(Native Method)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.lang.reflect.Method.invoke(Method.java:515)
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.view.View$1.onClick(View.java:3823)
08-05 09:52:45.082: E/AndroidRuntime(9680): ... 11 more
08-05 09:52:45.082: E/AndroidRuntime(9680): Caused by: android.os.NetworkOnMainThreadException
08-05 09:52:45.082: E/AndroidRuntime(9680): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.net.InetAddress.getAllByName(InetAddress.java:214)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.example.vivzmultithreadingexample.MainActivity.downloadImageUsingThread(MainActivity.java:68)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.example.vivzmultithreadingexample.MainActivity$DownloadImagesThread.run(MainActivity.java:108)
08-05 09:52:45.082: E/AndroidRuntime(9680): at java.lang.Thread.run(Thread.java:841)
08-05 09:52:45.082: E/AndroidRuntime(9680): at com.example.vivzmultithreadingexample.MainActivity.downloadImage(MainActivity.java:48)
08-05 09:52:45.082: E/AndroidRuntime(9680): ... 14 more