我在android开发和编程方面是新手。我带了一些android开发的在线教程,我想在我的应用程序中以字符串形式下载网站源代码以供处理,但我无法做到。有时应用程序需要5到10分钟才能得到响应,但我的应用程序仍然无法正常连接,下面是我使用的代码。请帮助我,并为我提供一些故障排除方法
Java代码:
package com.example.webapp1;
import androidx.appcompat.app.AppCompatActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.ExecutionException;
public class MainActivity extends AppCompatActivity {
public class DownloadTask extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... strings) {
String result = "";
URL url;
URLConnection urlConnection = null;
try {
url = new URL(strings[0]);
urlConnection =url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1)
{
char current = (char) data;
result += current;
data = reader.read();
}
return result;
}
catch (Exception e)
{
e.getStackTrace();
return "failed";
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String result =null;
DownloadTask task = new DownloadTask();
try {
result = task.execute("https://www.imdb.com/list/ls052283250/").get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("result content",result);
}
}Android Mainfest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.webapp1">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
发布于 2020-05-16 20:10:17
您的代码中有很多错误,似乎缺少使用Java、文件和Android API的基础知识。
我会推荐谷歌搜索一些初学者的教程,但我没有具体的建议。
以下是代码中的问题:
int变量添加到String来累积结果的方法是不正确的。它将添加数值,而不是value表示的字符。
例如,字符串将包含"60“,而不是”<“标记。
您应该使用ByteBuffer或类似的方法。
execute方法获取后台(异步)任务的值。您必须使用read the documentation才能学习如何使用AsyncTask类。
若要处理doInBackground的返回值,必须实现onPostExecute方法!
Android Studio和Android OS提供了几种工具来排除代码故障。
最基本的是日志:将信息写入logcat的you can use Log class,工作室可以显示这些信息。
发布于 2020-05-16 23:59:39
@LevM再次感谢我已经用下面的代码替换了现有的代码,但我仍然没有得到网站的全部源代码
try
{
URL url = new URL(urls[0]);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
String inputLine;
StringBuilder stringBuilder = new StringBuilder();
while ((inputLine = bufferedReader.readLine())!=null)
{
stringBuilder.append(inputLine);
}
bufferedReader.close();
urlConnection.disconnect();
return stringBuilder.toString();
}
catch (MalformedURLException e)
{
e.printStackTrace();
return "Failed";
}
catch (IOException e)
{
e.printStackTrace();
return "Failed";
}
}https://stackoverflow.com/questions/61836289
复制相似问题