Reputation: 21
I would like to get content of an Internet txt file. When I open it with emulator I get this message
"Unfortunately application has stopped".
Nothing happens if remove "http://" but it doesnt read anything and becomes null
. What's wrong? How can read the url above? I have added permission.
This is the whole code i changed but still get same error. what mistake i do? http://dforum.zxq.net/code.txt
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... arg0) {
try {
URL url = new URL("http://dforum.zxq.net/myfile.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String str;
while ((str = in.readLine()) != null) {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
// str is one line of text; readLine() strips the newline character(s)
}
in.close();
} catch (MalformedURLException e) {
} catch (IOException e) {
}
return null;
// TODO Auto-generated method stub
}
}.execute();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Upvotes: 2
Views: 471
Reputation: 5362
Make sure you taking this process off the main UI thread by running it inside an AsyncTask
. Check out this tutorial: http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/. More specifically, check out the JSONParser class in there.
UPDATE
You are calling Toast
in a while loop, which I think is the reason it's crashing. Replace it with Log.d()
or System.out.println()
Upvotes: 0
Reputation: 47985
Make sure that you don't do that on the UI thread and also check that you have the internet permission.
Both cases can cause an exception which let your app crash.
Here is an example about how to prevent doing network operations on the GUI thread:
new AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
// add your try catch block here.
return null;
}
}.execute();
Upvotes: 1