【发布时间】:2016-06-26 19:25:56
【问题描述】:
所以我一直在努力解决这个问题,结果碰了壁。当它开始处理时,它总是给我一个致命的错误。
所以基本上我想从互联网上读取一个文本文件,然后解析它,这样我就可以开始把它分开并使用 JSON 解析器来处理 JSON 数据。但这更进一步(我已经构建了部分)。我只是在连接和下载数据时遇到问题。我只想读入文本文件,然后再次打印出来。
感谢您对此提供的任何帮助。
这就是它给我的东西
01-26 15:11:48.373 1958-1958/com.example.mmillar.urljsonparser I/art: 未启用后期 -Xcheck:jni(已启用) 01-26 15:11:48.556 1958-1958/com.example.mmillar.urljsonparser D/HTML P1::http://textfiles.com/100/914bbs.txt 01-26 15:11:48.556 1958-1958/com.example.mmillar.urljsonparser D/HTML P2::http://textfiles.com/100/914bbs.txt 01-26 15:11:48.557 1958-1958/com.example.mmillar.urljsonparser D/HTML inJSON::http://textfiles.com/100/914bbs.txt 01-26 15:11:48.569 1958-1958/com.example.mmillar.urljsonparser D/Status:: 连接打开 01-26 15:11:48.569 1958-1958/com.example.mmillar.urljsonparser D/Status:: 关闭连接 01-26 15:11:48.569 1958-1958/com.example.mmillar.urljsonparser D/AndroidRuntime: 关闭虚拟机 01-26 15:11:48.570 1958-1958/com.example.mmillar.urljsonparser E/AndroidRuntime: 致命异常: main 进程:com.example.mmillar.urljsonparser,PID:1958 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.mmillar.urljsonparser/com.example.mmillar.urljsonparser.MainActivity}:android.os.NetworkOnMainThreadException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:android.os.NetworkOnMainThreadException 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 在 java.net.InetAddress.lookupHostByName(InetAddress.java:418) 在 java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 在 java.net.InetAddress.getAllByName(InetAddress.java:215) 在 com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29) 在 com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) 在 com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332) 在 com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:199) 在 com.example.mmillar.urljsonparser.JSONParser.getStream(JSONParser.java:40) 在 com.example.mmillar.urljsonparser.MainActivity.onCreate(MainActivity.java:24) 在 android.app.Activity.performCreate(Activity.java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在 android.app.ActivityThread.access$800(ActivityThread.java:151) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 01-26 15:11:53.474 1958-1958/? I/Process:发送信号。 PID:1958 SIG:9
所以我有点迷失在哪里出了问题。我想我已经准备好了一切并且进展顺利。像 inputstream、bufferreader 等等。这就是我所拥有的。
这是解析器程序
public class JSONParser extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... inputUrl) {
getStream(inputUrl[0]);
return null;
}
public void getStream(String urlString)
{
Log.d("HTML inJSON: ", urlString );
//variables for the connection and downloading the JSON data
URL url = null;
HttpURLConnection urlConnection = null;
InputStream inputStream = null;
try {
url = new URL(urlString);
urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();
Log.d("Status:","Connection Opened");
//read in the data
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
//build the data for parsing
StringBuilder myString = new StringBuilder();
String line;
while((line = br.readLine()) !=null)
{
myString.append(line);
}
Log.d("Status:"," JSON loaded into string");
Log.d("Total:", myString.toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
if (urlConnection != null)
{
//close the connection
urlConnection.disconnect();
Log.d("Status:", " Closing connection");
}
}
}
}
这是我刚刚运行的主程序,因为我只想从文件输出到控制台,我只是想确保它正常工作。
public class MainActivity extends AppCompatActivity {
//http://textfiles.com/100/914bbs.txt
private String testHtml = "http://textfiles.com/100/914bbs.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("HTML P1: ", testHtml );
JSONParser jp = new JSONParser();
Log.d("HTML P2: ", testHtml );
jp.getStream(testHtml);
Log.d("HTML P3: ", testHtml);
}
【问题讨论】: