Issue
I am writing the simplest application for Android. I receive all the HTML of the site and display this text on the smartphone screen. All this happens in Android Studio. Created a project using the "Fragment + ViewModel" template. In MainActiviti, using the getContent method, I connect to the site and read its HTML. The method works, but as soon as I try to transfer the text to the screen, the application is immediately minimized on startup. Tell me what's wrong.
public class MainFragment extends Fragment{
final public String URL_POSTER = "https://udmfil.ru/";
public static MainFragment newInstance() {
return new MainFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
DownLoad FOG = new DownLoad();
FOG.execute(URL_POSTER);
String result_post = String.valueOf(FOG);
Log.i("URL",result_post);
return inflater.inflate(R.layout.main_fragment, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new ViewModelProvider(this).get(MainViewModel.class);
}
public class DownLoad extends AsyncTask<String,Void,String[]> {
@Override
protected String[] doInBackground(String... strings) {
HttpURLConnection connection = null;
BufferedReader reader= null;
try {
URL url = new URL(strings[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder buffer = new StringBuilder();
String line;
while ((line = reader.readLine()) != null)
buffer.append(line);
Log.i("URL", String.valueOf(buffer));
/*String pos = buffer.toString();
int indexPost, i = 1;
String postB;
do {
indexPost = pos.indexOf("m-img buy") + 21;
Log.i("URL", String.valueOf(indexPost));
if (indexPost != -1){
postB = pos.substring(indexPost, indexPost + 55);
Log.i("URL",postB);
strings[i] = postB;
indexPost = indexPost +55;
pos = pos.substring(indexPost);
Log.i("FLAG",pos);
i++;
Log.i("FLAG",strings[i]);
Log.i("URL", String.valueOf(i));
}
}while (indexPost != -1);*/
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null)
connection.disconnect();
try {
if (reader != null)
reader.close();
}catch (IOException e){
e.printStackTrace();
}
}
return strings;
}
}
}
error log:
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$4.done(Unknown Source:27)
at java.util.concurrent.FutureTask.finishCompletion(Unknown Source:36)
at java.util.concurrent.FutureTask.setException(Unknown Source:23)
at java.util.concurrent.FutureTask.run(Unknown Source:40)
at android.os.AsyncTask$SerialExecutor$1.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source:79)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source:2)
at java.lang.Thread.run(Unknown Source:4)
Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
at java.net.Inet6AddressImpl.lookupHostByName(Unknown Source:111)
at java.net.Inet6AddressImpl.lookupAllHostAddr(Unknown Source:22)
at java.net.InetAddress.getAllByName(Unknown Source:3)
at com.android.okhttp.Dns$1.lookup(Dns.java:41)
at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:178)
at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:144)
at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:86)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:176)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:90)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:30)
at com.example.myapplication.ui.main.MainFragment$DownLoad.doInBackground(MainFragment.java:58)
at com.example.myapplication.ui.main.MainFragment$DownLoad.doInBackground(MainFragment.java:48)
at android.os.AsyncTask$3.call(Unknown Source:20)
at java.util.concurrent.FutureTask.run(Unknown Source:31)
Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
at libcore.io.Linux.android_getaddrinfo(Native Method)
at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:74)
at libcore.io.BlockGuardOs.android_getaddrinfo(BlockGuardOs.java:200)
at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:74)
at java.net.Inet6AddressImpl.lookupHostByName(Unknown Source:51)
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
Now this is how it turns out.
Solution
As you have not given the Internet permission host is not able to access the address and receive the data and in result it is getting crashed when you initiating the app.
Insert the below line in your menifest:
<uses-permission android:name="android.permission.INTERNET" />
Answered By - Ashirwad Kumar
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.