Я хочу получить данные из Интернета с помощью JSON
, я использую класс AsynkTask
, чтобы сделать это и его работу, но если я добавлю или изменим код и запустим мою программу снова он перестает работать с android.os.NetworkOnMainThreadException
Но я никогда не запускал этот код на main thread
, и я должен нажать на fix project
, затем clean
и запустить снова, и он снова работает отлично, в чем проблема? Мой код, который работает следующим образом:android.os.NetworkOnMainThreadException в AsynkTask Class
public class NetworkDocStateThread extends AsyncTask<String, Void, Void> {
HttpResponse responseState;
@Override
protected Void doInBackground(String... params) {
try {
responseState = JsonDocumnet
.SendDocumentState(Financial.selectedGuId);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void post) {
try {
Financial.documnetStateDs = JsonDocumnet
.DocumentState(responseState);
documentStateSpinner.add(Financial.documnetStateDs.get(i)
.getTitle());
}
SpinnerStateAdapter = new ArrayAdapter<String>(Documnet.this,
R.layout.spinnlayout, R.id.docstateid,
documentStateSpinner);
SpinnerNumAdapter = new ArrayAdapter<String>(Documnet.this,
R.layout.spinnlayout, R.id.docstateid, getResources()
.getStringArray(R.array.numPerPage));
SpinnerSortAdapter = new ArrayAdapter<String>(Documnet.this,
R.layout.spinnlayout, R.id.docstateid, getResources()
.getStringArray(R.array.SortBy));
new NetworkDocThread().execute(Financial.selectedGuId, "5",
"0", "Id", "-1");
docStateSpinner.setAdapter(SpinnerStateAdapter);
NumberPerPageSpinner.setAdapter(SpinnerNumAdapter);
SortBySpinner.setAdapter(SpinnerSortAdapter);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
super.onPostExecute(post);
}
}
и второй класс AsyncTask:
public class NetworkDocThread extends AsyncTask<String, Void, Void> {
HttpResponse responseDoc;
@Override
protected Void doInBackground(String... s) {
try {
responseDoc = JsonDocumnet.SendDocumnet(s[0], s[1], s[2], s[3],
s[4]);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void post) {
try {
Financial.docs = JsonDocumnet.Document(responseDoc);
CreatingData();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
;
}
dialog.dismiss();
}
}
}
и файл манифеста:
<uses-permission android:name="android.permission.INTERNET" />
и моя LogCat
ошибка
12-03 05:08:43.022: E/AndroidRuntime(1106): FATAL EXCEPTION: main
12-03 05:08:43.022: E/AndroidRuntime(1106): android.os.NetworkOnMainThreadException
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
12-03 05:08:43.022: E/AndroidRuntime(1106): at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
12-03 05:08:43.022: E/AndroidRuntime(1106): at libcore.io.IoBridge.recvfrom(IoBridge.java:513)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
12-03 05:08:43.022: E/AndroidRuntime(1106): at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103)
12-03 05:08:43.022: E/AndroidRuntime(1106): at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:134)
12-03 05:08:43.022: E/AndroidRuntime(1106): at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:174)
12-03 05:08:43.022: E/AndroidRuntime(1106): at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:159)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.io.InputStreamReader.read(InputStreamReader.java:244)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.io.BufferedReader.fillBuf(BufferedReader.java:130)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.io.BufferedReader.readLine(BufferedReader.java:354)
12-03 05:08:43.022: E/AndroidRuntime(1106): at json.JsonDocumnet.Documen(JsonDocumnet.java:200)
12-03 05:08:43.022: E/AndroidRuntime(1106): at activity.Documnet$NetworkDocThread.onPostExecute(Documnet.java:375)
12-03 05:08:43.022: E/AndroidRuntime(1106): at activity.Documnet$NetworkDocThread.onPostExecute(Documnet.java:1)
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.os.AsyncTask.finish(AsyncTask.java:631)
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.os.Handler.dispatchMessage(Handler.java:99)
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.os.Looper.loop(Looper.java:137)
12-03 05:08:43.022: E/AndroidRuntime(1106): at android.app.ActivityThread.main(ActivityThread.java:5041)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.lang.reflect.Method.invokeNative(Native Method)
12-03 05:08:43.022: E/AndroidRuntime(1106): at java.lang.reflect.Method.invoke(Method.java:511)
12-03 05:08:43.022: E/AndroidRuntime(1106): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-03 05:08:43.022: E/AndroidRuntime(1106): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-03 05:08:43.022: E/AndroidRuntime(1106): at dalvik.system.NativeStart.main(Native Method)
Я использую классы 2 AsynkTask
, потому что мне нужны данные первого класса во втором классе, и я не могу делать сетевые ввод-вывод в onPostExecute
AsyncTask
.
РЕДАКТИРОВАТЬ ////////////////////
и функции докумен:
public static DocumentDS Documen(HttpResponse response) throws IOException, JSONException
{
String split[] ;
List<DocumentInfoDS> dslis = new ArrayList<DocumentInfoDS>();
split = response.getStatusLine().toString().split(" ");
for (int i = 0 ; i < split.length ; i++)
{
Log.d("status code is", split[i]);
}
Log.d("status code is", split[1]);
switch (Integer.valueOf(split[1])/100)
{
case 2:
Log.d("IN Switch STATMENT", "2");
in = new BufferedReader(new InputStreamReader(response
.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
Log.d("line is", line);
sb.append(line + NL);
}
Log.d("after setting data", "1234");
in.close();
json = sb.toString();
JSONObject jsonObj = new JSONObject(json);
docs = new DocumentDS();
docs.SetDocCount(jsonObj.getInt(TAG_Count));
JSONArray jsonArray = new JSONArray(jsonObj.getString(TAG_Docs));
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject temp = jsonArray.getJSONObject(i);
DocumentInfoDS ds = new DocumentInfoDS();
ds.SetGuId(temp.getString(TAG_Id));
ds.SetTitle(temp.getString(TAG_Title));
ds.SetStateID(temp.getInt(TAG_StateId));
ds.SetCreateDate(temp.getString(TAG_CreateDate));
ds.SetDocumnetNumber(temp.getInt(TAG_DocumentNum));
dslis.add(ds);
}
docs.SetList(dslis);
Log.d("lenght is", String.valueOf(dslis.size()));
break;
}
return docs;
линии 200 в то время как ((строка = в. ReadLine())! = NULL)
Разрешение на использование Интернета в файле манифеста? – RobinHood
Вы даете разрешение на интернет? – Karthi
Опубликовать свой журнал cat –